【发布时间】:2017-06-11 13:52:43
【问题描述】:
我正在做Unix Advanced Programming中的练习,遇到了以下问题:
如果日历时间存储为带符号的 32 位整数,在哪一年会溢出?
正符号整数 = 2147483647
在以下计算中,我没有考虑闰年:
((((2147483647 / 60sec) /60min)/24)/365) = 68.1yrs
这是一种幼稚的方法。我该如何专业地解决这个问题?
堆栈成员之前提出的以下解决方案对于打印年份非常有帮助。
int epoch_time = INT_MAX;
struct tm * timeinfo;
time_t epoch_time_as_time_t = epoch_time;
timeinfo = localtime(&epoch_time_as_time_t);
printf("2] overflow date: %s", asctime(timeinfo));
【问题讨论】:
-
对我来说你的方法是正确的。
-
@MichaelWalz 这并不完全正确,因为它每年使用 365 天,实际上这个数字是 365.242...
-
你是在假设一个特定的时代吗?有标准的 unix 纪元,但如果需要,您可以使用其他纪元。
-
这被称为Year 2038 Problem。我有一个完整的讨论,叫做REPENT, FOR THE END OF THE UNIX EPOCH IS NIGH! (为糟糕的音频道歉)
-
@M.M 我写了方法是正确的,OP 说他没有考虑闰年。