我想我今天写的一些软件会在 30 年后使用。但我也知道,其中很多都是基于 UNIX 的传统,即自 1970 年以来将时间公开为秒数。
#include <stdio.h>
#include <time.h>
#include <limits.h>
void print(time_t rt) {
struct tm * t = gmtime(&rt);
puts(asctime(t));
}
int main() {
print(0);
print(time(0));
print(LONG_MAX);
print(LONG_MAX+1);
}
执行结果:
- 1970 年 1 月 1 日星期四 00:00:00
- 2008 年 8 月 30 日星期六 18:37:08
- 2038年 1 月 19 日星期二 03:14:07
- 1901 年12 月 13 日星期五 20:45:52
函数 ctime()、gmtime() 和 localtime() 都将时间值作为参数,该时间值表示自 Epoch 以来的时间(以秒为单位)(UTC 时间 00:00:00,1970 年 1 月 1 日;参见 time(3))。
我想知道作为程序员在这方面是否有任何积极主动的事情要做,或者我们是否相信所有软件系统(又名操作系统)将来都会神奇地升级?
更新看起来确实 64 位系统是安全的:
import java.util.*;
class TimeTest {
public static void main(String[] args) {
print(0);
print(System.currentTimeMillis());
print(Long.MAX_VALUE);
print(Long.MAX_VALUE + 1);
}
static void print(long l) {
System.out.println(new Date(l));
}
}
- 1969 年 12 月 31 日星期三 16:00:00 PST
- 2008 年 8 月 30 日星期六 12:02:40 PDT
- 8 月 16 日星期六 23:12:55 PST 292278994
- 12 月 02 日星期日 08:47:04 PST 292269055
但是 292278994 年呢?