Unix 时间达到 17 亿

Unix 时间最近跨过了自 1970 年 1 月 1 日纪元以来的 17 亿秒,程序员们用脚本、直播和轻松的数秘式庆祝来记录这一时刻。除了这个整数字的新奇感之外,参与者还借此深入讨论闰秒、UTC 与 TAI 及其他时间标准的差异,以及 32 位时间戳迫在眉睫的 2038 年问题。许多人指出,这些反复出现的纪元里程碑,像是一种为密切处理时间戳的人提供的长期节拍器。

里程碑与反应

  • Unix 时间自 1970-01-01 起已达到 1,700,000,000 秒,引发了轻松的“庆祝”帖子,以及对更早里程碑(1.2B、1.4B、1.5B、1.6B、1.666…B、1.6G、1.5G、1400000000、1234567890、1,000,000,000)的呼应。
  • 一些评论者觉得这很有趣,是一种“数秘术”,并把这些时刻当作罕见的、长期的节拍器时刻,甚至把它们和生日或个人记忆联系起来。
  • 另一些人则不以为然,质疑为什么一个以 10 为基数的近似整数字值得在意,尤其是类似阈值大约每 3 年就会出现一次。

观察回绕

  • 人们使用 shell 循环(date +%swatch)、Node.js、Deno REPL,以及临时写的 JS 片段(带 setInterval、async generators、纠正漂移的定时器)来观察计数器跳动。
  • 少数人录制或直播了这一事件;还有人开玩笑说要“敲一下计算器”或拍下来以便回放。

闰秒、UTC,以及 Unix 时间究竟是什么

  • 围绕 Unix time 是“自纪元以来的秒数”还是“天数×86400+秒数”展开了详细辩论,重点指出 POSIX 将其定义为一种忽略闰秒的近似值。
  • 澄清如下:
    • 闰秒意味着有些真实的一天是 86401 秒,但 Unix time 假定为 86400 秒。
    • 这会导致 Unix time 与实际经过的 SI 秒数以及 TAI 发生偏离。
    • Unix time 没有闰秒的独立取值;某些时间戳会对应 2 秒的真实时间间隔。
  • 讨论了不同的时间标准和用途:UTC 用于人类活动,TAI/Unix/GPS 用于单调时间,UT1/视太阳时/恒星时/TCB 用于天文学和导航。
  • 还提到 UTC 的闰秒政策正在重新考虑中;未来可能会有“闰分”这一说法。

未来里程碑与 2038 问题

  • 人们指出了即将到来的里程碑:2027 年的 1.8B、2033 年的 2.0B、2,147,483,647(有符号 32 位最大值)以及 2,147,483,648。
  • 2038 问题被讨论为“下一个 Y2K”:现代系统大多使用 64 位时间戳,但遗留的 32 位系统和嵌入式设备(包括 ROM 烧录代码)仍然令人担忧。
  • 有人回忆起 Y2K,既把它视为真正的工程努力,也视为被夸大的末日预言;并指出恐惧有时确实能促使系统被修复。

纪元、日历与表示细节

  • 关于把 1970 还是“公元 1 年”作为纪元展开了辩论;也有人指出,许多日历纪元都存在,而格里高利纪年本身也是任意的。
  • 提到 Go 的时间表示使用公元 1 年,而早期机器使得以公元 1 年为纪元不切实际。
  • 一位评论者强烈主张用 TAI 取代 Unix time 以获得正确性。
  • Protobuf 建议:避免对时间戳使用变长整数;固定大小(fixed32/fixed64)通常更小也更快。