2011-06-28 78 views
0

我模擬器設置爲這個時區: 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年)。我還沒有找到任何官方文件證實這一點。

回答

1

不知道比利時,但在瑞典DST是1980年推出的,因此1970年比利時沒有DST可能是正確的。 但是,如果真正瞭解DST對您的應用程序非常重要在1970年,那麼您可能需要深入研究java.util.Date類的源代碼或與java.util.GregorianCalendar的結果進行比較。

+0

這並不重要,但在其他平臺(例如Blackberry)中,我收到了其他的行爲,並且我試圖明白爲什麼。遵循您的建議和我自己的好奇心,我挖掘了TimeZone源代碼。發現TZ信息位於/system/usr/share/zoneinfo/zoneinfo.dat中的記錄中,您可以使用adb進行記錄。但是,我不知道它使用了哪種格式,所以它很難讀。 –

+0

這對我來說也許很有趣,我在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

0

在真實設備(HTC Magic,OS 1.6)上測試,即使在1970年,它也檢測到Brussels/CEST的DST。所以這是仿真器和真實設備之間不同行爲的另一個例子。

我打算在更新的設備上再次測試它,看它是否存在跨操作系統版本的不同TZ數據庫。

更新 在Samsung Galaxy Tab(OS 2.2)上測試,與HTC相同的行爲。