为什么编程语言以及数据库要从1970年1月1日开始计算时间

这是一个有趣又容易被忽略的问题。

 

上网查了一下,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肯定是不会这么消停。

 

 

 

 

 

 

 

 

 

 

posted on 2018-06-27 11:21  公子Z  阅读(829)  评论(0编辑  收藏  举报

导航