我有一些使用Calendar.set()返回給定日期值的小時開始的代碼。我遇到了以下問題上週日2012年11月4日(美國東部時區 - 東部時間到EST切換):Java日曆:上午1時切換到標準時間(從DST開始)
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;
}
輸出繼電器:
太陽年11月4 01:00:00 EDT 2012
孫年11月4 01:00:00 EST 2012
1.6.0_35
Perha ps這不是使用日曆的正確方法,但在下一小時(或上一小時)運行相同的測試可以正常工作。這是一個JVM問題?
感謝
好點。因此,Calendar似乎不支持消除這兩個重疊時間的方法(除了使用setTime/setTimeInMillis或通過使用@Nambari提到的setTimeZone。 – monex0
日曆是使用_most最近time_還是應用默認時區在創建日曆時(如果在夏令時開關發生後程序正在運行,這將是EST)......我不知道答案 – jahroy
@jahroy代碼中的註釋java.util .GregorianCalendar表示,它總是將當天的1:00-1:59解釋爲處於標準時間,而不是作爲任意約定的夏令時。「......這裏指定的時間是凌晨1點 - 凌晨1:59可以是標準時間或夏令時,兩者都是有效的表示方式(代表從標準時間1:59:59跳到1:00:00標準時間),再次假設標準時間「 – Affe