❏ 站外平台:

为什么计算机时间和众多编程语言要从1970年1月1日开始算起

作者: 非著名程序员

| 2015-08-12 08:57   评论: 7 收藏: 3    

今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是 1970年1月1号呢?我想大家应该都知道,但是我估计大家几乎大部分都没有想过这个问题。我们就一起来聊聊,这是为什么?

1、最懒的解释

很多编程语言起源于UNIX系统,而UNIX系统认为1970年1月1日0点是时间纪元,所以我们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。

说了这个懒人的解释,估计大家还没有懂得真正的意思。所以我们接下来深入的了解一下。

2、深入的了解

最初计算机操作系统是32位,而时间也是用32位表示。

System.out.println(Integer.MAX_VALUE);
2147483647

Integer 在JAVA内用32位表示,因此32位能表示的最大值是2147483647。另外1年365天的总秒数是 31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,从1970年开始的话,加上68.1,实际最终到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为 10000000 00000000 00000000 00000000,算下来也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。

到这里,我想问题的答案已经显现出来了,那就是:因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到 292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后 了。



最新评论

[1]
xq壮壮 [Safari 8.0|Mac 10.10] 发表于 2015-08-17 13:13 的评论:
timestamp=0 貌似是1970/01/01 08:00 吧?不是1970/01/01 0点
[2]
linux [Chrome 44.0|Mac 10.10] 发表于 2015-08-17 21:24 的评论:
我们是东八时区嘛。。。
xq壮壮 [Safari 8.0|Mac 10.10] 2015-08-18 10:30 1 回复
哦,哈哈,我说嘛。。。是我傻了。。。
[1]
来自浙江杭州的 Chrome 44.0|Mac 10.10 用户 发表于 2015-08-16 17:49 的评论:
有点期待 2038年01月19日03时14分07秒 这一时刻的到来
linux [Chrome 44.0|Mac 10.10] 2015-08-16 18:39 1 回复
这个已经解决啦,勿忧。
来自湖南娄底的 Firefox 39.0|Windows 10 用户 2015-08-15 20:34 1 回复
hehe
来自上海的 Firefox 39.0|Fedora 用户 2015-08-12 09:29 11 回复
这个标题就有问题,什么叫编程语言要从...开始算;编程语言本身根本不记录任何时间,它只是调用系统提供的时间接口而已。因此在linux系统上,无论什么语言,最底层归根到底都是调用了系统调用,诸如gettimeofday、time之类的。

返回顶部

分享到微信

打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。