2013-05-21 32 views
1

我正在檢查DayLight保存時間,因爲我使用的是美國時區。由於DST於2013年3月10日凌晨2:00在美國開始,並將於2013年11月3日凌晨2:00結束。所以我們必須在凌晨2點轉發時鐘1小時,當它結束時,必須在凌晨2點恢復時鐘1小時。我只是想檢查DST結束時凌晨2:00的實際時間。它在DST開始時工作正常,但DST結束時它不工作。這裏是我試過的代碼示例:問題得到結束DayLight保存時間

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 AM據我所知,應該是1:00 AM呢?

+1

什麼是'DateUtil'和'Dateformat'? – assylias

+0

你可以使用喬達時間嗎?這是一個更好的圖書館... –

+0

@assylias現在你可以再次檢查我編輯的代碼,以便更好地理解 – JackNeil

回答

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

感謝您的回覆,但我的疑問是,爲什麼Timezone在凌晨1:00從PDT變爲PST,因爲DST在凌晨2:00結束,根據我的理解,當01:59:60時應該有凌晨1:00。如果可能,請你清除我的疑問。 – JackNeil

+0

@傑克尼爾我不確定是否誠實。您可以使用我的代碼發佈一個新問題,並解釋您期望的輸出,而不是實際得到的內容(並將'date'標籤添加到該問題中)。 – assylias

+0

非常感謝您的建議。根據你的建議我發佈了一個新問題,希望這可以幫助我:) – JackNeil