跳转到主要内容
标准

2038 年问题

er ling san ba nian wen ti

定义

2038 年问题 (又称 Y2K38) 发生在以 32 位有符号整数存储 Unix 时间戳的系统到达其最大值 2,147,483,647 的时刻,即 2038 年 1 月 19 日 03:14:07 UTC。下一秒将导致整数溢出,数值回绕为 -2,147,483,648,被解释为 1901 年 12 月 13 日。任何依赖 32 位 time_t 的软件从该时间点起都将产生错误的日期。

受影响的系统

是否会触及这一上限,取决于时间以何种数据类型存储,而非操作系统的位数。以 64 位整数存储时,实际使用中不会触及该上限,但 32 位的时间表示仍可能残留在嵌入式系统 (物联网设备、工业控制器、汽车 ECU)、遗留文件格式 (ext3 文件系统时间戳)、过时的数据库模式,以及内部仍使用 32 位整数的程序库中。任何使用寿命较长且设计于 64 位时间戳普及之前的系统都有潜在风险。

解决方案

根本修复方法是将时间戳存储迁移到 64 位整数,64 位整数可以表示约 2920 亿年,对实际用途而言没有限制。Linux 内核在 5.6 版本 (2020 年发布) 中增加了对 32 位系统处理 2038 年之后日期的支持。应用程序开发者应审计其库和数据库中的 32 位时间戳依赖,并在截止日期到来之前尽早规划迁移。

这篇文章对您有帮助吗?

相关术语

相关文章