Calendar.set() を使用して、特定の日付値の時間の始まりを返すコードがあります。2012 年 11 月 4 日日曜日 (東部タイムゾーン - EDT から EST への切り替え) に次の問題が発生しました。
public void testStartOfHourDST1() {
Calendar cal = Calendar.getInstance();
long time = 1352005200000L; // Nov 4, 2012, 1AM EDT
cal.setTimeInMillis(time);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
System.out.println(new Date(time));
System.out.println(new Date(cal.getTimeInMillis()));
System.out.println(System.getProperty("java.version"));
assertEquals(cal.getTimeInMillis(), time); // fails
return;
}
出力:
2012 年 11 月 4 日 (日) 01:00:00 EDT
日 11 月 04 日 01:00:00 EST 2012
1.6.0_35
おそらく、これはカレンダーを使用する正しい方法ではありませんが、次の 1 時間 (または前の時間) に同じテストを実行すると問題なく動作します。これは JVM の問題ですか?
ありがとう