日历是否有闰秒?

时间:2012-12-28 06:07:26

标签: java calendar

GregorianCalendar类是否需要leap seconds

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

2 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:6)

java.util.Date API说

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

维基说

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

也就是说,没有班级可以了解未来的IERS决定。