我知道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