为什么java tzupdater会增加闰秒?

时间:2015-03-07 19:20:01

标签: java date datetime time leap-second

有一些参考文献提到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工具为什么会增加闰秒?

1 个答案:

答案 0 :(得分:2)

我现在已经仔细研究了TZUPDATER和IANA的发行说明(在其实验地点github / eggert / tz):

TZUPDATER说:

  

以美国/坎昆为代表的墨西哥金塔纳罗奥州将会   从DST的中部时间转移到没有DST的东部时间   2015-02-01 02:00智利不会在4月或4月改变时钟   其后;它的新标准时间将是其旧的夏令时   时间。这会影响美国/圣地亚哥,太平洋/复活节和   南极洲/帕尔默。新的闰秒2015-06-30 23:59:60 UTC按照   IERS Bulletin 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工具那里得到的那样。