答案 0 :(得分:2)
在C中,标准的4字节格式假定时间的开始时间是1970年1月1日,上午12:00:00。该值为0.转换为负数之前的最大时间值(且无效) )值为2,147,483,647,转换为2038年1月19日。在此日期,任何使用标准时间库的C程序都将开始出现日期计算问题。要更正它,只需使用新版本的库重新编译程序即可。使用8字节值作为存储格式。
答案 1 :(得分:2)
试试这个:如果第二行(和第三行)不在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;
}
答案 2 :(得分:0)
自0000:00 UTF以来,以无符号整数形式存储或使用系统时间的程序将在2038年1月19日超出范围。虽然大多数软件将在2038年遇到此问题,但存储未来日期的软件将会早点受到影响。
解决方法需要重新编译(相关)代码,以更大的存储格式存储时间。看起来所有的编译器提供商已经准备好了解决方案。
此外,64位操作系统已经为所有时间整数使用64位包装器。这将使危险远远超出我们的时间范围。让下一代产生更好的解决方案。