java - 用Java查找自2004年1月1日UTC 00:00:00以来的TAI秒数

标签 java time utc tai-time

如标题所示,我需要找到自2004年1月1日UTC 00:00:00(使用Java)以来的TAI秒数。我最近才了解TAI是什么,而我尝试解决上述问题使我有些困惑。

我尝试过的

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

此外,从对原子时间的简短研究中,我了解到,当前的TAI比UTC提前了37(le)秒。

因此,我的思考过程是:


查找1970年至2004年(34年)之间的秒数
从当前UTC时间中减去得出2004年以来的数字
加37以获取TAI中的实际秒数


我不确定这里的数学(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 leap秒是否考虑了leap年,因此我应该使用选项2。不幸的是,我不确定我的思维过程是否正确,我认为这是正确的。 d最好在这里进行确认。

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

最佳答案

泰秒本质上是原子秒制秒,包括leap秒。我的库Time4J开箱即用地支持此功能。有关TAI支持的更多详细信息,另请参见类Momentjavadoc

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

关于java - 用Java查找自2004年1月1日UTC 00:00:00以来的TAI秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42032775/

相关文章:

java - 在 IBM Notes 中发送 HTTPS 帖子时出现 SSLHandshakeException

java - Joda-时间日期时间格式化程序 : get the correct output

java - 系统时区 ID

c++ - 如何强制 QDateTime::fromString 读取 UTC 时间

java - 更新 JavaFX BarChart 数据导致内存泄漏

java - 使用scaledBitmap创建透明度/镜像效果时避免致命内存错误

go - 按时间四舍五入到特定时间间隔

java - LibGDX 在暂停时停止时间计数器

java - Java中的间隔时间减法

excel - 年/月/日 HH :MM:SS offset to MM/DD/YYYY HH:MM:SS offset?