自 1970 年 1 月 1 日起经过了多少秒,包括闰秒?

问题描述

Unix 时间戳:

int(time.time())

给出自 1970 年 1 月 1 日以来经过的秒数,不含闰秒。

出于好奇,如何获得自此日期以来经过的真实秒数,包括闰秒? (即这两个事件在时间轴上的距离)

注意事项:

  • 示例:时间戳范围 867715190.000 .. 867715202.000 表示 13 秒的“实际持续时间”(用计时器测量),因为 1997 年的这一天出现了闰秒,而 Unix 时间戳具有增加了 +12。

  • 示例 2:从 1970 年 1 月 1 日到 2020 年 1 月 1 日(这 50 年间隔中的 12 个闰年)之间经过的实际时间是 (365*50+12)*24*3600 + number_leap_seconds 并且 不是 (365*50+12)*24*3600。但是我们看到 datetime.datetime.utcfromtimestamp((365*50+12)*24*3600)2020-01-01 00:00:00,所以显然没有考虑闰秒。

  • 链接What does python return on the leap secondUnix time and leap seconds

解决方法

自 1972-01-01 以来任何两个 UTC 时间戳之间的 SI 秒数需要访问已引入 UTC 的闰秒列表。此列表作为 IANA tzdata 分发版的一部分提供,也可以从其他来源获得。

需要注意,因为 1970-01-01 和 1972-01-01 之间的 SI 秒数是 2x365x24x60x60 + 1.999918 SI 秒,因为 1970 年的官方时间不是由铯原子决定的,而是由实际测量决定的地球自转,所以官方的秒数是太阳秒,而不是 SI 秒。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...