TimeZone未检测到DST

时间:2011-06-28 08:01:36

标签: java android timezone dst

我将模拟器设置为此时区: 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年)。我还没有找到任何证实这一点的官方文件。

2 个答案:

答案 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相同。