如果你在苹果智能语音助手 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日相关推荐

  1. 【历史上的今天】9 月 19 日:世界上第一个表情符号;微软发布 Virtual PC;苹果 UI 扁平化的开始

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 9 月 19 日,在 39 年前的今天,人类历史上第一张电脑笑脸":-)"诞生, ...

  2. 世界上第一台计算机诞生-1946年2月14日

    1946年2月14日 世界上第一台计算机诞生 工作中的ENIAC 1946年2月14日,世界上第一台电脑ENIAC在美国宾夕法尼亚大学诞生. 第二次世界大战期间,美国军方要求宾州大学莫奇来(Mauch ...

  3. 梦想世界3手游服务器维护,2021年4月1日官方维护公告

    2021年4月1日官方维护公告 发布时间:2021-04-01 [新增内容] 1.主角换新: 新增主角新模型资源,维护前已有角色玩家可在"奖励-主角换新"界面进行转换操作(可选择保 ...

  4. 最震撼的大片《2012》世界末日 电影 高画质 超DVD版清晰效果 在线视频播放

    最震撼的大片<2012>世界末日 电影 高画质 超DVD版清晰效果 在线视频播放 山崩地裂 海浪滔天 肯尼迪号航母被掀起撞毁白宫... http://four-corner.appspot ...

  5. 计算机时间、unix时间、linux时间、java时间为何以1970年1月1日为原点?从1970年1月1日开始计算?

    最初计算机操作系统是32位,而时间也是用32位表示. System.out.println(Integer.MAX_VALUE); 2147483647 Integer在JAVA内用32位表示,因此3 ...

  6. 2012世界末日其实是个大骗局【转】

    网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,2012年12月21日是"世界末日",这一天当黑暗降临后,黎明便 永远不 会到来.好像2012世界末日这个 ...

  7. 解密:2012世界末日其实是个大骗局

    网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,2012年12月21日是"世界末日",这一天当黑暗降临后,黎明便永远不 会到来.好像2012世界末日这个说 ...

  8. 详解---“2012世界末日”大骗局

     网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,<?xml:namespace prefix = st1 ns = "urn:schemas-microso ...

  9. 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告

    [WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...

最新文章

  1. Linux设备驱动--块设备(三)之程序设计(转)
  2. C++虚继承(九) --- 构造函数调用顺序的实用之处
  3. cc如何转换html5,HTML5转换
  4. 电梯停靠问题---------------给你出道题
  5. 电脑怎么结束进程_结束员工电脑进程/活动窗口的软件
  6. BZOJ2007 NOI2010 海拔 网络流+最短路
  7. c语言无纸化测评答案,无纸化计算机二级C语言程序设计题库答案程序题
  8. 学习笔记之深入浅出MFC 第5章 Windows程序的生与死
  9. 如何注册CSDN博客
  10. VTK学习笔记(十九)vtk polydata
  11. 实时视频动作检测(action detection)
  12. python组合数计算cmnn_《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感...
  13. 【pandas】set_index函数详解
  14. luci html 页面,luci更改登录账号.htm
  15. 南京大学计算机系住宿环境,请问有没有人知道南京大学计算机系大四学生在哪个校区?...
  16. docker logs查看日志
  17. javascript操作select元素一例
  18. Win10开启远程桌面
  19. picpick尺子像素大小精度不够准确_光栅尺精度与分辨率有什么关系吗?
  20. 倍福EtherCAT通信协议详细解析

热门文章

  1. vue开发本地调试微信网页授权
  2. 大数据助平安城市智慧转型
  3. 哎,我要改行了!ChatGPT版Excel?动动嘴皮子就把表格改完了!
  4. 版本4校园兼职软件遇到的问题和解决方法
  5. 190330 逆向-嘉韦思杯re2
  6. oracle 存储过程 循环嵌套,oracle 存储过程 循环嵌套
  7. 发段完美国际注入跑路call 全部原代码
  8. Win XP系统网络应用技巧集锦
  9. python 软件开发 哔哩哔哩_介绍Python爬取哔哩哔哩视频
  10. 在Ubuntu 16.04系统中,将Logitech G920方向盘连接到Carla服务器