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