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