加载中...

2038 年问题(Year 2038 Problem,Y2038)指使用 32 位有符号整数存储 Unix 时间戳的系统面临的溢出隐患:秒数将在 UTC 时间 2038 年 1 月 19 日 03:14:07 达到 2^31 - 1 的上限,下一秒溢出为负数,时间会「回卷」到 1901 年,被称为「Unix 千年虫」。
主要风险不在现代服务器——64 位系统的 time_t 已扩展为 64 位,足以表示数千亿年——而在长寿命的嵌入式设备:工控系统、汽车电子、路由器、智能电表等常用 32 位芯片且服役数十年。此外,旧文件格式、数据库字段、网络协议中固化的 32 位时间字段即使跑在 64 位系统上也照样受影响。值得注意的是,涉及未来日期的计算(如 20 年期贷款到期日)会提前遭遇该问题。
业界的主要对策是全面迁移到 64 位 time_t:Linux 内核与 glibc 已为 32 位架构提供 64 位时间接口,各语言运行时也多已完成迁移。对无法升级的存量设备,只能通过替换硬件或在应用层重新解释时间基准来规避。

登录 后参与讨论
暂无讨论,来发表第一条评论吧