1

我试图找出 DST 是如何工作的,因为我已经编写了关于 DST 的代码示例,我想知道为什么 TimeZone 根据我的理解在凌晨 1:00 发生变化应该给 1:00AM 然后 TimeZone 应该改变,但它不是那样的。谁能帮我解决这个问题...

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
4

3 回答 3

3

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

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

于 2013-05-21T15:44:34.783 回答
3

@Andrew Spencer 是对的,凌晨 1:00 有两种可能性,并Calendar选择了其中一种,而不是您期望的那种。如果您想查看 1:00 AM PDT,只需在 12:59 AM 增加一分钟:

  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()));
  }
于 2013-05-21T16:15:05.737 回答
0

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

于 2013-05-21T15:39:47.297 回答