2

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,很明显,闰秒没有被考虑在内。

  • 链接到Python 在闰秒返回什么,以及Unix 时间和闰秒

4

2 回答 2

2

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

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

于 2021-01-05T01:30:56.807 回答
0

我遇到了同样的问题,您可以使用“正确”的时间来解决它:

import os; import time; import datetime;
tai_epoch=datetime.datetime(1970, 1, 1, 0, 0, 10)
timezone=time.tzname[0];os.environ['TZ']='right/UTC';time.tzset()
now=datetime.datetime.utcnow()
leap_seconds=int(now.timestamp())-int((now-tai_epoch).total_seconds())
right_time=int(now.timestamp())+leap_seconds
os.environ['TZ']=timezone;time.tzset()

您可以将其与常规 UTC 时间进行比较,如下所示:

utc_time=int(time.time())
print(right_time-utc_time)

目前,它会给你37

于 2021-10-25T16:03:06.250 回答