TimeZone casablanca 的偏移量错误 (java)
Wrong offset for TimeZone casablanca (java)
我正在尝试在卡萨布兰卡时区建立一个日期(2014 年 7 月 29 日 02:55:08 上午)并遇到此异常:
线程异常 "main" java.lang.IllegalArgumentException: HOUR_OF_DAY: 2 -> 3
在 java.util.GregorianCalendar.computeTime(来源不明)
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.
不会抛出异常
据我所知,那个特定时间没有发生夏令时变化。有什么想法吗?
谢谢!
它实际上确实对应于夏令时的变化。在摩洛哥,斋月期间暂停夏令时。有关详细信息,请参阅 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 S
JRE 并非总是使用最新的时区数据进行更新。要保持最新状态,您必须 使用 TZUpdater 实用程序。 Oracle 为 JRE 和 TZUpdater 发布 the list of time zone updates。它表明最后一次 JRE 更新(在我写这篇文章时)是 Java 7 的版本 65,Java 8 的版本 11 - 它是用 tzdata 的 2014c 版本制作的。
如果我们看the sources for tzdata at version 2014c,可以看出当时对摩洛哥的猜测确实猜到了6月29日-7月29日斋月夏令时暂停
Rule Morocco 2014 only - Jun 29 3:00 0 -
Rule Morocco 2014 only - Jul 29 2:00 1:00 S
当埃及最终宣布真实日期时,当然后来更新为克里斯的回答中显示的值。
您可以看到一些来自最初猜测 here and there are many discussions in the tz list archives about Egypt, starting in May 并一直持续到 7 月的面包屑。
我正在尝试在卡萨布兰卡时区建立一个日期(2014 年 7 月 29 日 02:55:08 上午)并遇到此异常:
线程异常 "main" java.lang.IllegalArgumentException: HOUR_OF_DAY: 2 -> 3 在 java.util.GregorianCalendar.computeTime(来源不明)
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.
不会抛出异常据我所知,那个特定时间没有发生夏令时变化。有什么想法吗?
谢谢!
它实际上确实对应于夏令时的变化。在摩洛哥,斋月期间暂停夏令时。有关详细信息,请参阅 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 S
JRE 并非总是使用最新的时区数据进行更新。要保持最新状态,您必须 使用 TZUpdater 实用程序。 Oracle 为 JRE 和 TZUpdater 发布 the list of time zone updates。它表明最后一次 JRE 更新(在我写这篇文章时)是 Java 7 的版本 65,Java 8 的版本 11 - 它是用 tzdata 的 2014c 版本制作的。
如果我们看the sources for tzdata at version 2014c,可以看出当时对摩洛哥的猜测确实猜到了6月29日-7月29日斋月夏令时暂停
Rule Morocco 2014 only - Jun 29 3:00 0 -
Rule Morocco 2014 only - Jul 29 2:00 1:00 S
当埃及最终宣布真实日期时,当然后来更新为克里斯的回答中显示的值。
您可以看到一些来自最初猜测 here and there are many discussions in the tz list archives about Egypt, starting in May 并一直持续到 7 月的面包屑。