我模擬器設置爲這個時區: org.apache.harmony.luni.internal.util.ZoneInfo["CET",mRawOffset=3600000,mUseDst=true]
時區未檢測DST
這是布魯塞爾時間,那裏有DST,所以我們GMT + 02:00在夏季和GMT + 01:00冬季。
然而,程序也沒有辦法檢測DST於1970年7月,但它檢測到它在2011年例如:
TimeZone tz = TimeZone.getDefault();
if(tz.inDaylightTime(new Date(15638400000))){ //This timestamp is 01/07/1970 00:00:00:00 GMT
System.out.println("daylight time in July 1970"); //Not printed, despite being clearly in summer.
}
if(tz.inDaylightTime(new Date())){ // Now, 28/06/2011
System.out.println("daylight time in June 2011"); //printed, thats OK
}
有什麼不對的代碼? 1970年沒有DST?同樣的事情發生在根據javadoc包含DST的偏移處:
int off = tz.getOffset(15638400000); //This returns +01:00, wrong!!
int off2 = tz.getOffset(System.currentTimeMillis()); //returns +02:00, OK.
有關此行爲的一些想法? 謝謝。
編輯: 我已經爲這個時區做了一些測試,並且在1977年發現了第一個使用DST的夏天。畢竟,必須有一個開始日期來實施這項政策。然而,1977年似乎有點晚(石油危機在1970年和1973年)。我還沒有找到任何官方文件證實這一點。
這並不重要,但在其他平臺(例如Blackberry)中,我收到了其他的行爲,並且我試圖明白爲什麼。遵循您的建議和我自己的好奇心,我挖掘了TimeZone源代碼。發現TZ信息位於/system/usr/share/zoneinfo/zoneinfo.dat中的記錄中,您可以使用adb進行記錄。但是,我不知道它使用了哪種格式,所以它很難讀。 –
這對我來說也許很有趣,我在http://en.wikipedia.org/wiki/Tz_database上找到了一些信息,也可以在http://www.java2s.com/Open-Source/Java-Document/6.0- JDK模塊太陽/ UTIL /陽光/ UTIL /日曆/ ZoneInfoFile.java.java-doc.htm – Kennet