2013-05-21 34 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())); 
    }