3

正如标题所述,我需要找到自 2004 年 1 月 1 日 00:00:00 UTC 以来的TAI 秒数(在 Java 中)。我最近才知道 TAI 是什么,而我尝试解决上述问题让我有点困惑。

我试过的:

我知道在 Java 中,您可以使用System.currentTimeMillis()自 1970 年 1 月 1 日 UTC ( Javadocs ) 以来的毫秒数。

此外,从我对原子时间的简短研究中,我了解到目前 TAI 正好比 UTC 早 37(闰)秒。

因此,我的思考过程是:

  1. 求 1970 年到 2004 年(34 年)之间的秒数
  2. 从当前 UTC 时间中减去它,得到自 2004 年以来的数量
  3. 加 37 得到 TAI 中的实际秒数

我不确定这里的数学(1 天 = 86400 秒):

  • 选项 1:86400(秒)x 365.25(天(1 儒略年))x 34(年)= 1,072,958,400
  • 选项 2:86400(秒)x 365(天(1 个共同年份))x 34(年)= 1,072,224,000

在这一点上,我开始质疑添加到 TAI 的 37 闰秒与 UTC 相比是否要考虑闰年,因此我应该使用Option 2。不幸的是,我不确定我的思维过程是否正确,我认为最好在这里问一下。

此外,我发现这个引用声称1,072,915,200(秒)相当于01/01/2004 @ 12:00am (UTC)。哪种让我失望,因为它不等于我的任何一个计算。

4

1 回答 1

0

Tai-seconds 本质上是原子 SI-seconds,包括闰秒。我的库Time4J 开箱即用地支持此功能。有关 TAI 支持的更多详细信息,另请参阅class的javadocMoment

Moment m2004 = PlainTimestamp.of(2004, 1, 1, 0, 0).atUTC();
Moment now = SystemClock.currentMoment(); // other clocks based on NTP are possible
long seconds = SI.SECONDS.between(m2004, now);

System.out.println(seconds); // 425222084L
System.out.println(now); // 2017-06-22T13:15:24,570000000Z
于 2017-06-22T13:20:36.060 回答