我已经看到很多关于堆栈溢出的问题,关于为什么某些代码在 2038 年之后无法正常工作,但答案通常只建议升级到 64 位操作系统。我的问题是为什么首先会发生这种情况?它与2000年的问题相似吗?是否可以使用不同的操作系统进行修复,或者 32 位处理器在物理上无法处理 2038 年之后的时间?为什么?(我是 linux 新手,所以这可能是一个简单的问题,但我真的不知道答案)。
时间 un Unix 系统通过自纪元以来的秒数来跟踪,1970 年 1 月 1 日 UTC 时间 00:00。在 2038 年的某一时刻,该秒数将超过 32 位整数的存储能力。这就是 64 位内核解决该问题的原因。引用维基百科:
在许多平台上,表示时间点的 Unix time_t 数据类型是一个有符号整数,传统上为 32 位(但见下文),直接编码 Unix 时间编号,如前一节所述。32 位意味着它总共涵盖了大约 136 年的范围。最小可表示日期为 1901-12-13 星期五,最大可表示日期为 2038-01-19 星期二。UTC 2038-01-19 03:14:07 后一秒,此表示将溢出。预计这个里程碑将伴随着欢乐和恐惧的混合——参见 2038 年的问题。
在一些较新的操作系统中,time_t 已扩展到 64 位。这在两个方向上扩展了大约 2930 亿年所代表的时间,这是每个方向当前宇宙年龄的 20 多倍。
在这里进一步阅读。