2010-06-16 36 views
4

1942年4月3日有什麼特別的東西嗎?由於某些原因,第0天(上午12:00)的這個小時對於此特定日期是非法的。當使用寬鬆日曆但日間時間增加到1(上午1:00)時,接受日期。爲什麼1942/4/3 00:00:00 java.util.Calendar中的非法日期?

相關代碼

java.util.Calendar calendar = java.util.Calendar.getInstance(
    java.util.TimeZone.getTimeZone("Europe/Helsinki") 
); 
calendar.clear(); 
calendar.setLenient(false); 
calendar.set(1942, 3, 3, 0, 0, 0); 
calendar.getTimeInMillis(); 

異常

java.lang.IllegalArgumentException: HOUR_OF_DAY 
at java.util.GregorianCalendar.computeTime(Unknown Source) 
at java.util.Calendar.updateTime(Unknown Source) 
at java.util.Calendar.getTimeInMillis(Unknown Source) 

我真的是喜歡的日期並不寬鬆,因爲我不想接受不可能的日期。

- 編輯

作爲公認的答案和許多的評論指出,這確實涉及到夏令時。 1942年4月3日00:00夏令時在EEST /赫爾辛基時區進行了測試。目前,夏令時自1981年以來一直在使用,時鐘在03:00而不是00:00進行。這意味着e..g 2010年3月28日03:00在java.util.Calendar中不存在。

我只需要在我的代碼中爲這個特定日期創建一個特例。

+0

適合我。當然是負值,因爲它在時代之前。你確定你給我們的是你正在運行的?你是否嘗試過運行那個例子? – 2010-06-16 13:14:56

+4

http://stackoverflow.com/questions/1586109/hours-corrupted-when-subtract-one-day-from-gregoriancalendar 是的,根據你的時區設置,你沒有那個時間! – wtaniguchi 2010-06-16 13:15:58

+0

絕對看起來像一個與時區和夏令時相關的問題。 – 2010-06-16 13:21:22

回答

6

只是猜測,但它是否與夏令時有關?我想這將取決於您的代碼庫的本地化(夏令時生效的確切日期)以及其他因素。

---編輯---也許不是,因爲那是一個星期五。

+2

是的,這是! http://stackoverflow.com/questions/1586109/hours-corrupted-when-subtract-one-day-from-gregoriancalendar正在談論相同的日期。 – wtaniguchi 2010-06-16 13:16:40

+0

這是正確的。我會盡快接受答案。 – 2010-06-16 13:20:51

3

時區和夏令時每年都在變化,1942年在世界的大部分地區都是特別奇怪的 - 各個地區的轉手都相當迅速。亞洲的一些地區被標準化爲「緬甸時代」,因此從當地時代過渡。

你的個人資料說你在芬蘭,這並不複雜。這個world-time database把有問題的日期和時間放在一個小時內,因爲正常日光節約了。

+0

鏈接非常有趣,謝謝!我甚至都不知道芬蘭在1981年之前有沒有夏令時。 – 2010-06-16 13:41:05

+0

驗證偵測工作+1(檢查OP的配置文件) – Pops 2010-06-16 17:29:58

相關問題