我将模拟器设置为此时区:
org.apache.harmony.luni.internal.util.ZoneInfo["CET",mRawOffset=3600000,mUseDst=true]
这是布鲁塞尔时间,那里有DST,所以我们在夏天GMT + 02:00和冬天GMT + 01:00。
然而,以编程方式在1970年7月无法检测DST,但它在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年没有夏令时?偏移也是如此,根据javadoc,它包括DST:
int off = tz.getOffset(15638400000); //This returns +01:00, wrong!!
int off2 = tz.getOffset(System.currentTimeMillis()); //returns +02:00, OK.
关于这种行为的一些想法? 感谢。
编辑: 我已经为这个时区做了一些测试,并且在1977年发现了夏令时的第一个夏天。毕竟,必须有一个开始日期来实施这个政策。然而,1977年在我看来有点晚了(石油危机发生在1970年和1973年)。我还没有找到任何证实这一点的官方文件。
答案 0 :(得分:1)
不了解比利时,但在瑞典,DST于1980年推出,所以1970年比利时没有DST可能是正确的。
但是,如果您的应用程序在1970年真正了解DST非常重要,那么您可能需要深入研究java.util.Date
类的源代码或与java.util.GregorianCalendar
的结果进行比较。
答案 1 :(得分:0)
在真实设备(HTC Magic,OS 1.6)上测试,它甚至在1970年检测到布鲁塞尔/ CEST的DST。所以这是模拟器和真实设备之间不同行为的另一个例子。
我将在更新的设备上再次测试它,看看它是否在OS版本中有不同的TZ数据库。
UPDATE 在三星Galaxy Tab(OS 2.2)上测试,与HTC相同。