什么时候是世界末日?Unix的世界是2038年1月19日
如果你在苹果智能语音助手 Siri 里面提问:什么时候是世界末日呢?怕是会得到一个令人感慨和有爱的回答:Unix 32位计算器的末日可能是在 2038年1月19日发生,或许就在那时。
这一切到底是怎么回事呢?
可能要从编程语言中的“1970年1月1日0点”,这个概念讲起。
最懒的解释
很多编程语言起源于UNIX系统,而UNIX系统认为1970年1月1日0点是时间纪元,所以为偶们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。
深入的了解
最初计算机操作系统是32位,而时间也是32为表示。
System.out.println(Integer.MAX_VALUE); 2147483647
Integer在java内用32位表示,因此32位能表示的最大值就是2147483647。另外一年365天的总秒数是31536000,2147483647/31536000=68.1,也就是说32位能表示的最长时间是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位操作系统可以表示到292,277,026,596年的12月4日14时30分08秒,这是时间已经是千亿年以后了,所以也不用担心了。
最后一个问题:上面System.out.println(new Date(0)),打印出来的时间是8点而非0点,原因是存在系统时间和本地时间的问题,其实系统时间依然是0点,只不过我的电脑时区设置为东8区,故打印的结果是8点。
我想以上问题如果作为面试题,也能难倒一批人了.
UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒,Epoch则是指定为1970年一月一日凌晨零点零分零秒,格林威治时间。
目前大部份的UNIX系统都是用32位元来记录时间,正值表示为1970以後,负值则表示1970年以前。我们可以很简单地计算出其时间领域:
2^31/86400(s) = 24855.13481(天) ≈ 68.0958(年)
1970+68.0958 = 2038.0958
1970-68.0958 = 1901.9042
时间领域为[1901.9042,2038.0958]。
准确的时间为2038年一月十八日星期一晚上十点十四分七秒。那一刻,时间将会转为负数,变成1901年十二月十三日黑色星期五下午三点四十五分五十二秒,然後Jason就会跑出来用斧头砸掉您的电脑。
这就是所谓的UNIX 2038 BUG,或者您也可戏称为Jason hatchet bug。在大部份的UNIX上,并没有所谓Y2K问题,不过都有2038年问题。
在一些64位元的平台上,例如Digital Alpha、SGI、Sparc等等,则用64位元来表示时间。
2^63/86400 ~ 1E14(天) ~ 2.92E11(年) 。大约是2920亿年。
因此,使用64位元的电脑可能会有 Armageddon bug 的问题。届时位於猎户座旋臂的太阳,已经是黑矮星或暗黑物质,猎户座旋臂大概也已经被重力波震断,银河系大概则已经变成小型似星体了。
虽然许多人认为UNIX的2038年问题会随着科技的进步,而将电脑逐步汰换成64位元电脑,因此无须担心。但我个人相信,在2038年,依然会有许多状况出现。因,就事实而言,目前许多UNIX系统都有足够的能力服役到2038年而毫无问题。因此,如果有意添购电脑主机,而且有预期会使用到那个时候,最好是选购64位元电脑,确认只有世界末日问题(除非您想要把资料流传给下一个宇宙,那就要另当别论了)。
什么时候是世界末日?Unix的世界是2038年1月19日相关推荐
- 【历史上的今天】9 月 19 日:世界上第一个表情符号;微软发布 Virtual PC;苹果 UI 扁平化的开始
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 9 月 19 日,在 39 年前的今天,人类历史上第一张电脑笑脸":-)"诞生, ...
- 世界上第一台计算机诞生-1946年2月14日
1946年2月14日 世界上第一台计算机诞生 工作中的ENIAC 1946年2月14日,世界上第一台电脑ENIAC在美国宾夕法尼亚大学诞生. 第二次世界大战期间,美国军方要求宾州大学莫奇来(Mauch ...
- 梦想世界3手游服务器维护,2021年4月1日官方维护公告
2021年4月1日官方维护公告 发布时间:2021-04-01 [新增内容] 1.主角换新: 新增主角新模型资源,维护前已有角色玩家可在"奖励-主角换新"界面进行转换操作(可选择保 ...
- 最震撼的大片《2012》世界末日 电影 高画质 超DVD版清晰效果 在线视频播放
最震撼的大片<2012>世界末日 电影 高画质 超DVD版清晰效果 在线视频播放 山崩地裂 海浪滔天 肯尼迪号航母被掀起撞毁白宫... http://four-corner.appspot ...
- 计算机时间、unix时间、linux时间、java时间为何以1970年1月1日为原点?从1970年1月1日开始计算?
最初计算机操作系统是32位,而时间也是用32位表示. System.out.println(Integer.MAX_VALUE); 2147483647 Integer在JAVA内用32位表示,因此3 ...
- 2012世界末日其实是个大骗局【转】
网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,2012年12月21日是"世界末日",这一天当黑暗降临后,黎明便 永远不 会到来.好像2012世界末日这个 ...
- 解密:2012世界末日其实是个大骗局
网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,2012年12月21日是"世界末日",这一天当黑暗降临后,黎明便永远不 会到来.好像2012世界末日这个说 ...
- 详解---“2012世界末日”大骗局
网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,<?xml:namespace prefix = st1 ns = "urn:schemas-microso ...
- 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告
[WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...
最新文章
- Linux设备驱动--块设备(三)之程序设计(转)
- C++虚继承(九) --- 构造函数调用顺序的实用之处
- cc如何转换html5,HTML5转换
- 电梯停靠问题---------------给你出道题
- 电脑怎么结束进程_结束员工电脑进程/活动窗口的软件
- BZOJ2007 NOI2010 海拔 网络流+最短路
- c语言无纸化测评答案,无纸化计算机二级C语言程序设计题库答案程序题
- 学习笔记之深入浅出MFC 第5章 Windows程序的生与死
- 如何注册CSDN博客
- VTK学习笔记(十九)vtk polydata
- 实时视频动作检测(action detection)
- python组合数计算cmnn_《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感...
- 【pandas】set_index函数详解
- luci html 页面,luci更改登录账号.htm
- 南京大学计算机系住宿环境,请问有没有人知道南京大学计算机系大四学生在哪个校区?...
- docker logs查看日志
- javascript操作select元素一例
- Win10开启远程桌面
- picpick尺子像素大小精度不够准确_光栅尺精度与分辨率有什么关系吗?
- 倍福EtherCAT通信协议详细解析