0

米国にあるサーバーで実行される Java アプリがあります。私のアプリには、現地時間とデータベースからフェッチされた別のタイムスタンプ値との差を見つけるメソッドがあり、この差が 86400 秒 (1 日) より大きいかどうかを確認する必要があります。ここでの問題は、サーバーが GMTに従っていることです。現地時間をミリ秒単位で見つけることができません。次のコードを使用して、米国時間と GMT 時間の間のオフセットを見つけ、System.currentTimeMillis() から差し引いて米国の現地時間を見つけようとしました。

int Offset_inmillis = Calendar.getInstance().getTimeZone().getRawOffset();
int DSTSavings_inmillis = Calendar.getInstance().getTimeZone().getDSTSavings();
long localtime_inmillis = System.currentTimeMillis() + DSTSavings_inmillis + Offset_inmillis;

しかし、サーバーは GMT を考慮に入れているため、上記のコードは再びミリ秒単位で GMT 時間の値を示しています (上記のコードでは Offset_inmillis と DSTSavings_inmillis の両方の値が 0 です)。オフセットを差し引くことで回避策を提供できます (コードでオフセット値をハードコーディングします) が、夏時間は考慮されず、別のサーバーでホイストされた場合はコードが機能しないため、そうしたくありません。異なるタイムゾーン。

コードがすべてのタイムゾーンで機能するソリューションが必要です。そのためには、サーバーの現地時間 (ミリ秒単位) を見つけるためのソリューションが必要です (ただし、この場合、サーバーは GMT 時間に従っています)。誰でも助けることができますか?

4

2 に答える 2

1

現地時間と、データベースからフェッチされた別のタイムスタンプ値との差を見つけるには

// Change 'America/New_York' depending on the local timezone of your server
TimeZone tz = TimeZone.getTimeZone("America/New_York"); 
// Gives the offset of your server timezone from the GMT
long tzoffset = tz.getOffset(Calendar.getInstance().getTimeInMillis());

ところで、理想的には、データベースのタイムスタンプも GMT にする必要があります

于 2012-05-11T09:55:37.003 に答える
0

java.util.TimeZone クラスを使用してこれを実現できます。ここに小さな例があります:

http://www.roseindia.net/java/example/java/util/TimeZones.shtml

これがあなたを助けることを願っています。

于 2012-05-11T09:15:47.693 に答える