自纪元以来的秒数

主要观点:人们常认为 POSIX 时间(Unix 时间)是 1970 年 1 月 1 日 00:00:00 以来的秒数,但这并不准确,因为实际每天的时长并非 86400 秒,存在闰秒,导致 POSIX 时间会偶尔跳变,这给软件带来隐患,建议在不同场景使用不同的时间相关函数和标准,且目前有终止闰秒的努力。

关键信息:

  • POSIX 时间基于 Coordinated Universal Time,标准假设每天 86400 秒,但实际时长变化,会有闰秒,使 POSIX 时间偶尔跳变。
  • 闰秒会给依赖“秒数”的分布式应用带来问题,软件可能累积严重未被察觉的 bug。
  • 若只需计算单台计算机上两事件的持续时间,可用CLOCK_MONOTONICCLOCK_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,直到闰秒引发问题。
阅读 7
0 条评论