2017-02-15 60 views
1

我試圖用joda DateTime創建一個固定的日期時間,基於代碼執行時間(當前系統時間)產生出人意料的不同結果。 下面是代碼DateTime API根據代碼執行時間產生不同的結果

DateTimeZone.setDefault(DateTimeZone.forID("Europe/Brussels")); 
DateTime t1 = new DateTime().withDate(2012, OCTOBER, 28).withTime(2, 0, 0, 50); 
//Note that 2012, OCTOBER, 28, 02:00:00 is a DST swtich time in Belgium 

的代碼產生兩種不同的結果(時區偏移的變化)

//Please note that the local time zone is CET. 
00:00:00:00 > execution time < 03:00:00 -> 2012-10-28T02:00:00.050+02:00 
03:00:00:00 >= execution time =< 24:00:00 -> 2012-10-28T02:00:00.050+01:00 

在另一方面,使用構造產生相同的結果

DateTimeZone.setDefault(DateTimeZone.forID("Europe/Brussels")); 
DateTime dateTime = new DateTime(2012, OCTOBER, 28, 2, 0, 0, 50); //gives 2012-10-28T02:00:00.050+02:00 

我有一個印象,應該使用構造函數而不是withDate/Time方法。但我有點困惑,爲什麼DateTime無法處理這個問題?

回答

1

那麼,表達式new DateTime()是明智的執行時間,所以它最終得到一個不同的偏移量。 對於有問題的具體數值,存在矛盾(相同的本地時間出現兩次!)。

我認爲你應該更好地選擇另一個構造,而是明確地將所有必填字段的值,然後調用要麼

withLaterOffsetAtOverlap() 

withEarlierOffsetAtOverlap() 

參見DateTimejavadoc

相關問題