【问题标题】:Why does java tzupdater add leap seconds?java tzupdater 为什么要添加闰秒?
【发布时间】:2015-03-07 19:20:00
【问题描述】:

有一些参考文献提到 Java 忽略了闰秒:

How can a 1 year old (java) lib correctly perform an UTC Time formatting, considering a newly introduced leap second

Do Java system milliseconds take account of leap seconds?

JDK-4272347 : (cal/tz) support leap seconds ticket

然而文件Timezone Data Versions in the JRE Software提到:

根据 IERS Bulletin C 49,新闰秒 2015-06-30 23:59:60 UTC。

第三方 Java 库 Time4J 使用它自己的闰秒列表。

如果 Java 忽略了闰秒,为什么 Java 的 tzupdater 工具会添加闰秒?

【问题讨论】:

  • 你认为 tzupdater 为什么会增加闰秒?
  • 大卫,据我了解,基于 tzdata2015a 的最新 tzupdater 增加了闰秒:oracle.com/technetwork/java/javase/tzdata-versions-138805.html
  • 好问题,但我认为这只是 tzupdater 发行说明中的​​复制和粘贴操作。 TZDB 维护者在他们的发行说明中有这个条目,Oracle 只是复制它(但不是闰秒数据!)。

标签: java date datetime time leap-second


【解决方案1】:

我现在仔细查看了 TZUPDATER 和 IANA 的发行说明(在其实验位置 github/eggert/tz 中):

TZUPDATER 说:

以 America/Cancun 为代表的墨西哥金塔纳罗奥州将 从有 DST 的中部时间转换为没有 DST 的东部时间 2015 年 2 月 1 日 02:00。智利将不会在四月或 此后;它的新标准时间将是旧的夏令时 时间。这会影响美国/圣地亚哥、太平洋/复活节和 南极洲/帕尔默。新闰秒 2015-06-30 23:59:60 UTC 根据 IERS 公告 C 49。

IANA 说:

发布 2015a - 2015-01-29 22:35:20 -0800

 Changes affecting future time stamps 

 The Mexican state of Quintana Roo, represented by America/Cancun, 
 will shift from Central Time with DST to Eastern Time without DST 
 on 2015-02-01 at 02:00.  (Thanks to Steffen Thorsen and Gwillim Law.) 

 Chile will not change clocks in April or thereafter; its new standard time 
 will be its old daylight saving time.  This affects America/Santiago, 
 Pacific/Easter, and Antarctica/Palmer.  (Thanks to Juan Correa.) 


 New leap second 2015-06-30 23:59:60 UTC as per IERS Bulletin C 49. 
 (Thanks to Tim Parenti.)

据此,Oracle 员工很可能刚刚完成了复制和粘贴操作,而没有考虑太多与 Java 发行版真正相关的内容。唯一的变化是删除了作者参考。当然,事实仍然是,在实际的 OpenJDK 和 Oracle-Java 发行版中,没有可以加载此类闰秒数据的代码或位置。

在我自己对此SO-question 的回答中,我还指出了最新的相关mail statement,Threeten 项目负责人最终放弃了对闰秒的临时可用计划支持。所以你对 Java-8 的乐观是没有道理的。

顺便说一句,Time4J 的最新版本 v2.3 现在可以部署包含在 IANA-TZDB 中的闰秒信息,正如您对 TZUPDATER 工具所期望的那样。

【讨论】:

  • blogs.oracle.com/java-platform-group/entry/…有一个关于 TZUpdater 2.0 的很好的解释
  • @Costlow 令人惊讶的是,Oracle 甚至给出了使用 TZUpdater 2.0 更新 tz 存储库以获取有关闰秒的帮助的毫无意义的建议,请参阅here。似乎并非甲骨文的每个人都真正参与了此事。他们甚至指出了 Java-API 中关于 0-61 范围内可能的第二个值的错误声明(值 61 是不可能的!)。
猜你喜欢
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2023-02-02
  • 2015-09-16
  • 2021-05-15
  • 2019-10-30
相关资源
最近更新 更多