2012-05-08 10 views
3

2つの日付の違いを(yyyy-MM-dd hh:mm:ssの形式で)見つけるコードがあります。このコードは、世界中の複数のサーバーで実行されます。 2つの日付のうちの1つは、コードが実行されている特定のタイムゾーン(サーバー時刻)の現在時刻と、データベースから取得された時刻です。これらの2つの時間の差が86400秒(1day)より大きい場合、 "無効"と表示され、それ以外の場合は "有効"と表示されます。 問題は、コードに直面している問題は、自分のローカルで稼働しているときですが、それはうまく動作しますが、私はそれを米国のサーバーに展開すると、GMT時間が考慮され、現地時間ではありません。 コードが実行されるどこにいても、データベースからフェッチされた現在の時刻と時刻の差が必要です.86400秒を超える場合は、無効な値を出力します。どのようにJavaでこれを達成するには? PS:Dateオブジェクトを試しましたが、GMTはどこにでもあると考えています。2つの日付間の差異を異なるタイムゾーンで秒単位で見つける方法

+0

デフォルトのタイムゾーンを設定しても問題ありませんか?http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#setDefault(java.util.TimeZone) –

+0

いいえ、デフォルトのタイムゾーンを設定すると、コードが単一のタイムゾーンにデプロイされている場合にのみ機能します。私のコードは世界中の複数のサーバーに展開されます –

答えて

5

私はGMTをどこでも使用し、表示のために現地時間に変換するだけです。

違いを見つけるには、両方の時間を同じタイムゾーン(GMTなど)に変換し、その差を取ってください。

2

以下のコード例で行うことができます。

Date date = new Date(); 

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z"); 
formatter.setTimeZone(TimeZone.getTimeZone("CET")); 

Date date1 = dateformat.parse(formatter.format(date)); 

// Set the formatter to use a different timezone 
formatter.setTimeZone(TimeZone.getTimeZone("IST")); 

Date date2 = dateformat.parse(formatter.format(date)); 
// Prints the date in the IST timezone 
// System.out.println(formatter.format(date)); 

は今date2の

0

まずで日付1の比較、私はそこにピーターLawreyの答えに同意します。通常、単一ゾーンのすべての時間をデータベースに格納し、ユーザーのロケールに基づいてユーザーのオフセットを使用してレンダリングすることをお勧めします。

違いを見つけるには、方法getTime()を使用して、各日付のエポックからのミリ秒単位の時間を取得します。 1日の差の計算は、86400 * 1000ミリ秒です。または、エポックからミリ秒単位で時間をデータベースに格納し、取得時にDBプロシージャ/ファンクションを使用します。

これが役に立ちます。

関連する問題