1

我正在尝试检查夏令时,因为我使用的是美国时区。美国的 DST 于 2013 年 3 月 10 日凌晨 2:00 开始,并将于 2013 年 11 月 3 日凌晨 2:00 结束。所以我们必须在凌晨 2:00 将时钟提前 1 小时,当它结束时,我们必须在凌晨 2:00 将时钟提前 1 小时。我只是想检查 DST 结束时凌晨 2:00 的实际时间。它在 DST 开始时工作正常,但在 DST 结束时它不起作用。这是我尝试过的代码示例:

TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
Calendar cal =Calendar.getInstance();
if (TimeZone.getDefault().useDaylightTime())
{
for(int i = 0; i< 5 ; ++i)
{
     cal.set(2013,10,03,1,57+i,60);
     long timemillis = cal.getTimeInMillis();
     setCurrentTimeInMills(timemillis);
     String formatTime = Dateformated(timemillis);
     System.out.println(formatTime);
     }
}

输出如下:

03-11-2013 01:58:00 PST
03-11-2013 01:59:00 PST
03-11-2013 02:00:00 PST
03-11-2013 02:01:00 PST
03-11-2013 02:02:00 PST

我的 Java 版本:1.6.0_16。这里 Datformated() 是用户定义的函数,用于以可读格式查看时间,而 setCurrentTime() 也是用户定义的方法来设置当前时间。谁能帮我解释一下为什么凌晨 1:59:60 的时间变成了凌晨 2:00据我所知,应该改为凌晨 1:00?

4

1 回答 1

0

下面的代码显示了从 PDT 到 PST 的时区变化

public static void main(String[] args) throws InterruptedException {
    TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
    DateFormat fmt = new SimpleDateFormat("dd-MM-yy HH:mm:ss zz");

    Calendar cal = Calendar.getInstance();
    cal.set(2013, 10, 03, 0, 59, 59);
    System.out.println(fmt.format(cal.getTime()));

    cal.set(2013, 10, 03, 1, 0, 0);
    System.out.println(fmt.format(cal.getTime()));
}

输出:

03-11-13 00:59:59 PDT
03-11-13 01:00:00 PST
于 2013-05-21T14:05:05.360 回答