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

时间:2017-02-03 20:47:44

标签: java time utc tai-time

正如标题所述,我需要在2004年1月1日00:00:00(Java)中找到TAI 的数量。我刚刚了解到TAI是什么,我试图解决上述问题让我有些困惑。

我尝试过的事情:

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

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

因此,我的思考过程是:

  1. 查找1970年至2004年(34年)之间的秒数
  2. 从当前UTC时间减去该数字以获得自2004年以来的数字
  3. 添加37以获取TAI中的实际秒数
  4. 我不确定这里的数学(1天= 86400秒):

    • 选项1:86400(秒)x 365.25(天(1 Julian Year))x 34(年)= 1,072,958,400
    • 选项2:86400(秒)x 365(天(1 Common Year))x 34(年)= 1,072,224,000

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

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

1 个答案:

答案 0 :(得分:0)

Tai-seconds基本上是原子SI秒,包括闰秒。我的图书馆Time4J支持此功能。有关TAI支持的更多详细信息,请参阅类Moment的{​​{3}}:

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