主要观点:人们常认为 POSIX 时间(Unix 时间)是 1970 年 1 月 1 日 00:00:00 以来的秒数,但这并不准确,因为实际每天的时长并非 86400 秒,存在闰秒,导致 POSIX 时间会偶尔跳变,这给软件带来隐患,建议在不同场景使用不同的时间相关函数和标准,且目前有终止闰秒的努力。
关键信息:
- POSIX 时间基于 Coordinated Universal Time,标准假设每天 86400 秒,但实际时长变化,会有闰秒,使 POSIX 时间偶尔跳变。
- 闰秒会给依赖“秒数”的分布式应用带来问题,软件可能累积严重未被察觉的 bug。
- 若只需计算单台计算机上两事件的持续时间,可用
CLOCK_MONOTONIC
或CLOCK_BOOTTIME
;若无需与其他 POSIX 时间系统交换时间戳,可使用 TAI、GPS 或 LORAN;若需与其他 POSIX 时间系统粗略对齐,可在较长时间窗口内涂抹闰秒,有库可进行 POSIX 和 TAI 之间的转换。 - 目前有终止闰秒的努力,希望到 2035 年实现。
重要细节:
- 如当前 2024 年 12 月 25 日 18:51:26 UTC,POSIX 时间是 1735152686,距离 POSIX 纪元已过 1735152713 秒,POSIX 时间数低 27 秒。
- IEEE 1003.1 附录 B 对闰秒有讨论,标准作者承认“自纪元以来的秒数”并非实际秒数,要求应用可将其视为自参考时间以来的秒数,供应商和管理员需确保时间尽可能对齐。
- 时间同步通常有偏差但系统仍能运行,而闰秒罕见且“自纪元以来的秒数”这一概念深入人心,易导致软件 bug,直到闰秒引发问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。