C 2038年的问题是什么?如何找出现有代码是否存在该问题并加以解决?

C 2038年的问题是什么?如何找出现有代码是否存在该问题并加以解决?,c,time,year2038,C,Time,Year2038,可能重复: 2038年的问题是什么 如何找出我们的代码是否有这个问题并解决它?在C语言中,标准的4字节格式假定时间的开始时间是1970年1月1日12:00:00 a.m.这个值是0。在它转为负值(无效)之前的最大时间值是2147483647,转换为2038年1月19日。这天,,任何使用标准时间库的C程序都将开始出现日期计算问题。要更正此问题,只需使用新版本的库重新编译程序,该库使用8字节值作为存储格式。自00:00 UTF起以无符号整数形式存储或使用系统时间的程序将在运行时超出范围2038年1

可能重复:

2038年的问题是什么


如何找出我们的代码是否有这个问题并解决它?

在C语言中,标准的4字节格式假定时间的开始时间是1970年1月1日12:00:00 a.m.这个值是0。在它转为负值(无效)之前的最大时间值是2147483647,转换为2038年1月19日。这天,,任何使用标准时间库的C程序都将开始出现日期计算问题。要更正此问题,只需使用新版本的库重新编译程序,该库使用8字节值作为存储格式。

自00:00 UTF起以无符号整数形式存储或使用系统时间的程序将在运行时超出范围2038年1月19日。尽管大多数软件将在2038年面临这个问题,但存储未来日期的软件将更早受到影响

该解决方案需要重新编译(相关)代码,以更大的存储格式存储时间。似乎所有的编译器提供程序都已经准备好了解决方案

此外,64位操作系统已经对所有时间整数使用64位包装器。这将使危险远远超出我们的时间范围。让下一代找到更好的解决方案。

试试这个:如果第二(和第三)行不在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;
}
#包括
#包括
内部主(空){
时间x;

x=(time_t)((1U,带8个字节,下一个问题什么时候会出现?没关系,明白了:读起来很有趣。似乎2100将是2038年之后的下一个大问题。我不认为我们会在可预见的未来,带4个字节(e9),它已经持续了68年,现在有了8个字节,可存储的秒数就到了e17。在一年中,我们大约有e7秒,所以我认为我们至少有e9年的时间:)我认为我们不必担心,我们有很多时间来整理这些东西!!!已经有很多重复的,例如和