在Java中查找自2004年1月1日00:00:00 UTC以来的TAI秒数



如标题所述,我需要查找自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(年)=1072958400
  • 选项2:86400(秒)x 365(天(1个普通年))x 34(年)=1072224000

此时,我开始质疑添加到TAI的37闰秒与UTC相比是否是闰年,因此我应该使用选项2。不幸的是,我不确定我的思维过程是否正确,我想最好在这里询问以确定。

此外,我发现这篇引文声称1072915200(秒)相当于2004年1月1日凌晨12:00(UTC)。这让我很反感,因为它不等于我的两个计算。

Tai秒本质上是原子SI秒,包括闰秒。我的库Time4J支持开箱即用的功能。有关TAI支持的更多详细信息,请参阅类Moment:的javadoc

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

相关内容

  • 没有找到相关文章

最新更新