首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Unix时间戳实际上跟踪了什么?

Unix时间戳实际上跟踪了什么?
EN

Stack Overflow用户
提问于 2018-09-09 09:44:32
回答 2查看 1K关注 0票数 12

我知道Unix时间戳被定义为自1970-01-01 00:00:00Z以来传递的秒数。然而,我找不到一个明确的来源给出这个定义。我还读过关于UTC和Unix时间戳之间关于闰秒的关系的各种不同的声明。

这个维基百科页面包含所有闰秒的列表。第一个是

代码语言:javascript
运行
复制
1972-06-30 23:59:60

关于Unix时间戳的语句

至于“所有现代计算机系统”,Unix time除了秒外什么都不知道。

来源:HackerNews井

UNIX time跟踪UTC,而不是TAI,意思是它“修正”了闰秒。因此,UNIX不是“自划时代以来的秒数”,而是"86400 *(自划时代以来的一整天数)+(自午夜以来的秒数)“,UNIX时间将向前(从未如此远)并在闰秒上向后移动(在大多数实现中,一秒钟将在23:59:60到00:00:00 :00:00:00:00之间重复,因为它们具有相同的时间戳)。

来源:黑客新闻,面具

我还读过Unix时间戳假设每天有24*60*60秒的东西(但在堆栈溢出的某个地方,我再也找不到了)。海报暗示,日子仍然是同步的,而闰秒只是“慢下来”真正的秒。因此,"unix时间戳秒“可能不是SI秒。

可能的答案

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

A1: Unix时间戳跟踪SI秒自1970-01-01 :00:00 Z。这意味着他们离世界协调世界时还有27秒的距离。

A2: Unix时间戳跟踪“在TAI中传递秒”。这意味着将Unix时间戳转换为UTC的库必须处理闰秒。

A3: Unix时间戳跟踪“UTC中传递的秒”。这意味着在大多数情况下,两个Unix时间戳1之间的差异可能是1SI秒,但不是全部。

请在你的答案中添加一个来源。

Python

蟒蛇datetime似乎不知道闰秒(?)

代码语言:javascript
运行
复制
>>> 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模块似乎将实际的闰秒映射到了之前的第二个:

代码语言:javascript
运行
复制
>>> 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的支持。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-09 10:14:01

A.4.16自中世纪以来的4.16秒 协调世界时(UTC)包括闰秒。但是,在POSIX时间(自时代以来的秒)中,闰秒被忽略(而不是应用),以提供一种简单和兼容的计算时间差的方法。因此,抛开POSIX时间不一定是UTC,尽管它的外观。..。 大多数系统的“时间”概念是一个不断增加的值,因此即使在闰秒期间,这个值也应该增加。然而,不仅大多数系统不跟踪闰秒,而且大多数系统可能没有与任何标准时间引用同步。因此,要求表示为秒的时间是不合适的,因为Epoch精确地表示了所引用的时间和时代之间的秒数。 只需允许应用程序将此时间视为表示引用时间与时代之间的秒数就足够了。系统供应商和系统管理员有责任确保此值表示在该系统上运行的应用程序所需的从引用时间到Epoch之间的秒数。

资料来源: 16

票数 3
EN

Stack Overflow用户

发布于 2021-06-01 01:57:37

Unix时间跟踪自1970-01-01 00:00:00 UTC减去UTC的https://www.ietf.org/timezones/data/leap-seconds.list后所经过的SI秒。正闰秒不被计算,负闰秒被计算两次。换句话说,它计算起来好像每天持续86,400 SI秒,所以Unix时间是86,400的倍数,对应于午夜UTC。

无闰秒的午夜过渡(UTC日持续86,400 SI秒):

代码语言:javascript
运行
复制
UTC       Second #  Unix time (mod 86,400)
--------  --------  ----------------------
23:59:58  86,398th  86,398
23:59:59  86,399th  86,399
00:00:00  86,400th  86,400

午夜转换,正闰秒(UTC日持续86,401 SI秒);到目前为止,已经发生了27天:

代码语言:javascript
运行
复制
UTC       Second #  Unix time (mod 86,400)
--------  --------  ----------------------
23:59:59  86,399th  86,399
23:59:60  86,400th  86,399 <- positive leap second: not counted in Unix time
00:00:00  86,401th  86,400

以负闰秒为单位的午夜过渡(UTC日持续86,399 SI秒);到目前为止从未发生过这种情况:

代码语言:javascript
运行
复制
UTC       Second #  Unix time (mod 86,400)
--------  --------  ----------------------
23:59:57  86,397th  86,397
23:59:58  86,398th  86,398 86,399 <- negative leap second: counted twice in
00:00:00  86,399th  86,400           Unix time

有关其他信息,请参阅此这个答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52243276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档