17

GregorianCalendar 类是否满足闰秒?

如果没有,是否有任何 3rd 方库满足它?

4

2 回答 2

14
  1. GregorianCalendar 不考虑闰秒(Oracle 的源代码视图显示了这一点 - 始终明确假设 1 分钟 = 60 秒)。此外:Oracle 现已正式拒绝支持闰秒 - 请参阅 Bug-ID 4272347
  2. 在 Java 中,没有标准的 3rd 方库支持闰秒 - 甚至没有 joda-time。只有这样的专业软件才能做到一点。
  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 闰秒是绝对不可能的。在最好的情况下,您可能会期待一个即将到来的外部模块(三个额外) 作为 JSR 310 的补充,它最多只能提供基本支持(它是 UNIX 时间和 TAI 时间尺度之间的转换,而不是更多,并且在我看来使用了一个根本错误的域模型)。
  4. System.currentTimeMillis()正式与操作系统计时器有关。而且由于我所知道的所有操作系统,包括 Microsoft、Linux 和 Apple,都只基于 UNIX 规范,这个 java 系统计时器不计算闰秒,只计算自 1970-01-01T00:00:00.000Z 以来的正常毫秒
  5. 由于所有这些事实,我决定建立我自己的名为Time4J的日期和时间 java 库,它完全支持闰秒,并且可以作为带有 LGPLv2.1 许可证的 v1.0 使用。一篇dzone 文章演示了 v4.2 版本的这种支持。
于 2013-06-17T04:40:22.030 回答
6

java.util.Date API 说

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

维基说

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

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

于 2012-12-28T06:35:43.687 回答