如标题所述,我需要查找自2004年1月1日00:00:00 UTC以来的TAI秒数(Java)。我最近才知道什么是TAI,我试图弄清楚上面的内容让我有点困惑。
我尝试过的:
我知道在Java中,您可以使用System.currentTimeMillis()
来获取自1970年1月1日UTC(Javadocs)以来的毫秒数。
此外,从我对原子时的简短研究中,我了解到目前TAI正好领先UTC 37秒。
因此,我的思考过程是:
- 查找1970年至2004年(34年)之间的秒数
- 从当前UTC时间中减去,得到自2004年以来的
- 加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