这是一个有趣又容易被忽略的问题。
上网查了一下,linux编程中对时间的计算是相对1970.1.1 00:00:00 的,为什么是这个时间呢
答案是:计算机位数的限制。
我们知道最初计算机操作系统是32bit,时间也是用32bit来表示,
也即2^32 = 4294967296(考虑符号位并去掉0,最大值为4294967296/2-1 = 2147483647),这是整数的最大值。
1年总的秒数为365*24*3600 = 31536000
2147483647/31536000 = 68.1 year
也就是说32位能表示的最长时间是68年,那么为了当下编程的考量及照顾未来可能的发展(64bit)
于是,选择1970年作为epoch起点,那么到2038年01月19日03时14分07秒,便会到达最大时间
过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000也就是1901年12月13日20时45分52秒
这样便会出现时间回归的现象,很多软件便会运行异常了。
可以预见的是,到了2038年那个时间点,很多遗留的老程序会出现问题,千年虫也许是虚惊一场,但是2038肯定是不会这么消停。