我知道Unix时间戳定义为自1970-01-01 00:00:00Z以来经过的秒数。但是,我找不到给出此定义的明确来源。我还阅读了有关UTC和Unix时间戳之间有关leap秒的各种不同陈述。

This wikipedia page包含所有leap秒的列表。第一个是

1972-06-30 23:59:60

关于Unix时间戳的声明



资料来源:HackerNews, brazzy



资料来源:Hacker News, masklinn

我还读过(但我找不到它-在Stack Overflow上的某个地方),Unix时间戳假定每天恰好有24 * 60 * 60秒。张贴者暗示,日期仍然以某种方式保持同步,而the秒只是“减速”了真正的秒。因此,“unix时间戳秒”可能不是SI秒。

可能的答案

我可以看到三个可能的答案:

A1:Unix时间戳记自1970-01-01 00:00:00Z开始的SI秒。这意味着它们与UTC的距离为27秒。

解答2:Unix时间戳记跟踪“在TAI中已过去的秒数”。这意味着将Unix时间戳转换为UTC的库必须处理leap秒。

解答3:Unix时间戳记跟踪“以UTC为单位的秒数”。这意味着在大多数情况下,两个Unix时间戳之间的差值为1可能是1 SI秒,但并非全部。

请为您的答案添加来源。

Python

Python的datetime似乎不知道leap秒(?)。
>>> import datetime
>>> a = datetime.datetime(1972, 6, 30, 23, 59, 59)
>>> b = datetime.datetime(1972, 7, 1, 0, 0, 0)
>>> b-a
datetime.timedelta(0, 1)

并且time模块似乎在第二秒之前映射了实际的before秒:
>>> import time
>>> t3 = time.mktime((1972, 6, 30, 23, 59, 59, -1, -1, -1))
>>> t4 = time.mktime((1972, 7, 1, 0, 0, 0, -1, -1, -1))
>>> t4 - t3
1.0
>>> t4 = time.mktime((1972, 6, 30, 23, 59, 60, -1, -1, -1))
>>> t4 - t3
1.0

issue23574支持此印象。

最佳答案


来源: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16

10-06 14:59