为什么编程语言以及数据库要从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肯定是不会这么消停。

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/zhaogang99/p/9233043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值