Java中的DayLight节省时间问题结束

时间:2013-05-21 15:32:53

标签: java date dst

我正在试图找到DST是如何工作的,因为我已经编写了关于DST的代码示例,我想知道为什么TimeZone按照我的理解DST在2013年11月3日凌晨2:00凌晨1点更改为2 :00AM它应该在凌晨1点给出,然后TimeZone应该是chnaged,但它不是那样的。任何人都可以帮助我摆脱这个......

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

3 个答案:

答案 0 :(得分:3)

01:00发生两次,一次在PDT,一次(一小时后)在PST。

如果您告诉日历在时间更改日期是01:00,那么该类会识别您的输入对应于2个不同的可能时间,并且任意使用其中一个。

答案 1 :(得分:3)

@Andrew Spencer是对的,凌晨1点有两种可能性,而Calendar选择了其中一种,而不是你期待的那种。如果你想看到凌晨1点 PDT ,那么只需添加一分钟到上午12:59:

  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.add(Calendar.MINUTE, 1);  // this will still be in PDT
    System.out.println(fmt.format(cal.getTime()));
  }

答案 2 :(得分:0)

如果我理解正确,你会想知道为什么03-11-13 01:00:00PST?我想你自己解释了这个。如果实际上2:00必须移动到1:00,那么1:00已经是夏令时,即PST。