3

2つの日付の違いを見つけるコードがあります(yyyy-MM-dd hh:mm:ssの形式)。このコードは、世界中の複数のサーバーで実行されます。2つの日付の1つは、コードが実行されている特定のタイムゾーンの現在の時刻(サーバー時刻)であり、もう1つはデータベースから取得された時刻です。これらの2つの時間の差が86400秒(1日)より大きい場合は「無効」と表示され、それ以外の場合は「有効」と表示されます。コードが直面している問題は、ローカルで実行すると正常に機能することですが、米国のサーバーにデプロイすると、ローカル時間ではなくGMT時間を考慮に入れます。コードが実行される場所はどこでも、現在の時刻とデータベースからフェッチされた時刻の差が必要です。86400秒を超える場合は、無効に出力します。これをJavaで実現する方法は?PS:Dateオブジェクトを試してみましたが、GMTはどこでも考慮されています。

4

3 に答える 3

5

私はどこでもGMTを使用し、表示目的でのみ現地時間に変換します。

違いを見つけるには、両方の時間を同じタイムゾーン(たとえばGMT)に変換し、違いを取ります。

于 2012-05-08T11:06:38.507 に答える
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));

次に、date1とdate2を比較します

于 2012-05-08T11:13:31.563 に答える
0

まず、私はそこにあるPeterLawreyの答えに同意します。通常は、単一のゾーンのデータベースに常に保存し、ユーザーのロケールに基づいてユーザーのオフセットを使用してレンダリングすることをお勧めします。

違いを見つけるには、このメソッドgetTime()を使用して、各日付のエポックからの時間をミリ秒単位で取得します。1日の差の計算は、86400*1000ミリ秒になります。または、エポックからの時間をミリ秒単位でデータベースに格納し、取得時にDBプロシージャ/関数を使用することもできます。

お役に立てれば。

于 2012-05-08T11:17:12.497 に答える