私は時間の処理を理解しようとしていますが、Java で何かを見つけて、やや困惑しました。次のサンプル コードを使用します。
public static void main(String[] args)
{
//Calendar set to 12:00 AM of the current day (Eastern Daylight Time)
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-4"));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
/////
//Calendar set to 12:00 AM of the current day (UTC time)
Calendar utcCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
utcCal.set(Calendar.HOUR_OF_DAY, 0);
utcCal.set(Calendar.MINUTE, 0);
utcCal.set(Calendar.SECOND, 0);
utcCal.set(Calendar.MILLISECOND, 0);
/////
long oneHourMilliseconds = 3600000;
System.out.println((cal.getTimeInMillis() - utcCal.getTimeInMillis()) / oneHourMilliseconds);
}
cal
2 つの形式のうちの 1 つを取ることによって表される時間を計算するためのアルゴリズムを視覚化します。
- エポックからミリ秒数を計算し、オフセットを追加 (-4 を追加)
- (エポック + オフセット) からミリ秒数を計算します。したがって、(
Epoch - 4 * oneHourMilliseconds
) からのミリ秒数。
これらのアルゴリズムは両方とも、 の結果より 4 時間遅れて結果を生成するはずですがutcCal
、コードを実行すると が返されます4
。
の 4 時間後のcal
タイムゾーンに設定されているにもかかわらず、 utcCalの 4 時間後のミリ秒値になる理由を誰かが説明できますか? コードが返されるべきではありませんか?utcCal
-4