日历是否有闰秒?

是否由GregorianCalendar类提供闰秒 ?

如果没有,是否有任何第三方图书馆迎合它?

java.util.Date API说明了这一点

“…虽然Date类旨在反映协调的通用时间(UTC),但它可能不会完全这样做,具体取决于Java虚拟机的主机环境。…大多数计算机时钟都不够精确,无法通过反映闰秒的区别。“

维基说

“由于地球的旋转速度因气候和地质事件而异,因此UTC闰秒是不规则间隔且不可预测的。每次UTC闰秒的插入通常由国际地球自转和参考系统服务(IERS)提前约六个月决定。 “

也就是说,没有class级可以知道未来的IERS决定。

  1. GregorianCalendar不支持闰秒(Oracle的源代码视图显示了这一点 – 在那里给出了1分钟= 60秒的明确假设)。 此外:甲骨文现已正式否认闰秒支持 – 请参阅Bug-ID 4272347 。
  2. 在Java中,没有标准的第三方库支持闰秒 – 甚至没有joda-time。 只有像这样的专业软件才能这样做。
  3. 请注意,许多库确实会讨论闰秒,但不支持,例如java.util.Date(请参阅Dorofeevs的回答)。 JSR 310也谈了很多,但不支持这个function。 正式的JSR 310支持UTC-SLS,它不计算闰秒,仅描述闰秒事件周围的涂抹橡胶秒。 事实上,JSR 310是否支持UNIX时间或UTC-SLS非常令人困惑(参见下一点)。 并且由于从JSR 310代码库中删除了闰秒信息( github / threeten / issues / 197 ),因此绝对不可能在JSR 310的范围内实现真正的UTC闰秒。在最好的情况下,您可能会期待即将到来的外部模块( Threeten-Extra )作为JSR 310的补充,它将提供最基本的支持(它是UNIX时间和TAI时间尺度之间的平移,而不是更多,并且在我看来是一个根本错误的域模型)。
  4. System.currentTimeMillis()与OS计时器正式相关。 由于包括Microsoft,Linux和Apple在内的所有操作系统都只基于UNIX规范,因此这个java系统计时器不计算闰秒,只计算自1970-01-01T00:00:00.000Z以来的正常毫秒数
  5. 由于所有这些事实,我决定建立我自己的日期和时间名为Time4J的 Java库,它完全支持闰秒,并且可以通过LGPLv2.1许可证获得v1.0。 dzone文章演示了如何使用v4.2版支持此支持。