可能重复:
我们应该为 2038 年做些什么准备?
什么是 2038 年问题?
如何找出我们的代码是否有这个问题并解决它?
在 C 中,标准的 4 字节格式假定时间的开始时间是 1970 年 1 月 1 日凌晨 12:00:00 此值为 0。在翻转为负(且无效)值之前的最大值为2,147,483,647,转换为 2038 年 1 月 19 日。在此日期,任何使用标准时间库的 C 程序都将开始出现日期计算问题。要纠正它,只需使用新版本的库重新编译程序,使用 8-存储格式的字节值。
试试这个:如果第二(和第三)行不在 2038 年,则您的系统存在 2038 年问题。
#include <stdio.h>
#include <time.h>
int main(void) {
time_t x;
x = (time_t)((1U << 31) - 1);
printf("%s\n", ctime(&x));
x += 1;
printf("%s\n", ctime(&x));
x += 1;
printf("%s\n", ctime(&x));
return 0;
}
自 UTF 00:00:00 起以无符号整数形式存储或使用系统时间的程序将在 2038 年 1 月 19 日超出范围。虽然大多数软件将在 2038 年面临这个问题,但存储未来日期的软件会更早受到影响.
解决方法将需要重新编译(相关)代码,以更大的存储格式存储时间。似乎所有编译器提供商都已经准备好使用该解决方案。
此外,64 位操作系统已经对所有时间整数使用 64 位包装器。这将使危险远远超出我们的时间范围。让远在下一代想出更好的解决方案。