我正试图在卡萨布兰卡时区建立一个日期(2014年7月29日凌晨02:55:08 ),并得到了以下例外:
线程"main“java.util.GregorianCalendar.computeTime(Unknown java.lang.IllegalArgumentException中的异常: HOUR_OF_DAY: 2 -> 3 at HOUR_OF_DAY Source)
Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("Africa/Casablanca"));
cal.setLenient(false);
cal.set(Calendar.DATE, 29);
cal.set(Calendar.MONTH, 6); // July
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.HOUR_OF_DAY, 2);
cal.set(Calendar.MINUTE, 55);
cal.set(Calendar.SECOND, 8);
cal.getTime();异常是用jre 1.7.0_71和1.8.0_20引发的,而不是用1.6.0_30引发的。
据我所知,在那个特定的时间没有夏令变化发生。知道吗?
谢谢!
发布于 2015-01-13 19:38:28
JRE并不总是使用最新的时区数据进行更新。要保持当前状态,必须使用TZUpdater实用程序。Oracle和时区更新列表同时发布TZUpdater。它表明,上一次JRE更新(在我撰写本文时)是在第65版的Java 7中,第11版是在Java 8的版本中进行的,它是使用tzdata的2014 C版编写的。
如果我们看看tzdata的来源,见2014 C版,我们可以看到,当时对摩洛哥的猜测确实是猜测斋月禁赛从6月29日至7月29日。
Rule Morocco 2014 only - Jun 29 3:00 0 -
Rule Morocco 2014 only - Jul 29 2:00 1:00 S当然,这是后来更新到克里斯的答案中所显示的数值,当时埃及终于宣布了真正的日期。
您可以从最初的猜测这里中看到一些面包屑,在tz列表中有很多关于埃及、从五月开始和一直持续到7月的讨论。
发布于 2015-01-13 15:08:11
它实际上与日光节约的变化相对应。在摩洛哥,斋月期间暂停了日光节约。有关详细信息,请参阅http://www.timeanddate.com/news/time/egypt-morocco-dst-ramadan-2014.html。
2014年的时区数据输入如下:
Rule Morocco 2014 only - Jun 28 3:00 0 -
Rule Morocco 2014 only - Aug 2 2:00 1:00 Shttps://stackoverflow.com/questions/27925035
复制相似问题