我模拟器设置为这个时区: 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