2013-05-21 124 views
0

我想了解DST是如何工作的,因为我已经写了关于DST的代码示例,我想知道为什么TimeZone会在凌晨1:00更改,按照我理解的DST 11月3日结束2013 at 2:00 AM所以在凌晨2:00它应该给1:00 AM然后TimeZone应该chnaged,但它不是那样的。谁能帮我出这...在java中DayLight节省时间问题的结束

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 
+0

输出看起来理智的我 - 你到底在期待,为什么? –

+0

上午1点30分将是PST,因为那个时间在1点30分在洛杉矶那是什么时区。也许混乱是因为从PDT1点到PD59点的“失去时间”。无法在给定的时区内引用它,您必须明确使用PDT。 –

+0

@AndrzejDoyle:感谢您的回复我期待TimeZone应该在凌晨1:59:30更改,因为DST在凌晨2:00进行安排,所以我们必须按照我的理解将时钟倒退1小时。对于DST的开始,它在上午1点59分60秒给出凌晨3点,因为它将时钟前进了1个小时......可能我并不清楚这一点......我只需要在这里澄清一下。 – JackNeil

回答

2

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

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

+0

如果您不介意 – JackNeil

+1

您能否请您解释一下您的答案据我所知,当02:00 PDT进场时,你的时钟的手,并推回到01:00,对吧?因此,您在01:00 PST后一小时有01:00 PDT。除非我误认为时钟变化的方向......这大概有50%的可能性...... –

0

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

+0

感谢您的回复。请您解释一下您的答案更多 – JackNeil

3

@安德鲁斯宾塞是对的,凌晨1点有两种可能性,Calendar挑了其中一个,而不是你期待的那个。如果你想看到1:00 AM 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())); 
    }