我知道 Unix 时间戳被定义为自1970-01-01 00:00:00Z
. 但是,我找不到给出这个定义的明确来源。我还阅读了关于 UTC 和 Unix 时间戳之间关于闰秒的关系的各种不同的陈述。
此维基百科页面包含所有闰秒的列表。第一个是
1972-06-30 23:59:60
关于 Unix 时间戳的声明
至于“所有现代计算机系统”,Unix 时间除了秒之外,什么都不懂。
资料来源:HackerNews,brazzy
UNIX 时间跟踪 UTC 而不是 TAI,这意味着它“更正”了闰秒。结果,UNIX时间不是“自纪元以来的秒数”而是“86400 *(自纪元以来的整天数)+(自午夜以来的秒数)”,并且UNIX时间将向前(从未如此)和在闰秒后倒退(在大多数实现中,当一天从 23:59:60 到 00:00:00 时会重复一秒,因为它们具有相同的时间戳)。
资料来源:黑客新闻,masklinn
我也读过(但我再也找不到它了——在 Stack Overflow 上的某个地方)Unix Timestamps 假设每天正好有 24*60*60 秒。海报暗示日子仍然以某种方式保持同步,而闰秒只是“减慢”真正的秒。因此,“unix 时间戳秒”可能不是 SI 秒。
可能的答案
我可以看到三个可能的答案:
A1:Unix 时间戳跟踪自 1970-01-01 00:00:00Z 以来的 SI 秒。这意味着它们与 UTC 相差 27 秒。
A2:Unix 时间戳跟踪“在 TAI 中经过的秒数”。这意味着将 Unix 时间戳转换为 UTC 的库必须处理闰秒。
A3:Unix Timestamps 跟踪“在 UTC 中经过的秒数”。这意味着在大多数情况下,两个 Unix 时间戳之间的差异 1 可能是 1 SI 秒,但并非全部如此。
请为您的答案添加来源。
Python
蟒蛇datetime
似乎不知道闰秒(?)。
>>> 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
模块似乎将实际的闰秒映射到前一秒:
>>> 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支持此印象。