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中不存在。
我只需要在我的代碼中爲這個特定日期創建一個特例。
適合我。當然是負值,因爲它在時代之前。你確定你給我們的是你正在運行的?你是否嘗試過運行那個例子? – 2010-06-16 13:14:56
http://stackoverflow.com/questions/1586109/hours-corrupted-when-subtract-one-day-from-gregoriancalendar 是的,根據你的時區設置,你沒有那個時間! – wtaniguchi 2010-06-16 13:15:58
絕對看起來像一個與時區和夏令時相關的問題。 – 2010-06-16 13:21:22