1999年12月31日的夜晚,人类即将迎接第二个千禧之年的到来,大家喜气洋洋地等待新年钟声的敲响。然而有那么一批人此时此刻却紧张不已,因为过了十二点钟,世界各地的政府和金融系统可能会在一瞬间崩溃。

  上世纪六十年代,计算机存储器的成本很高,如果用四位数字表示年份,就要多占用存储器空间,就会使成本增加,因此为了节省存储空间,计算机系统的编程人员采用两位数字表示年份。随着计算机技术的迅猛发展,虽然后来存储器的价格降低了, 但在计算机系统中使用两位数字来表示年份的做法却由于思维上的惯性势力而被沿袭下来, 年复一年。直到新世界即将来临之际,大家突然意识到,用两位数字表示年份将无法正确辨识公元2000年及其以后的年份。这将导致世界各地所有的计算机系统会把2000年认为是1900年,也就是说,计算机不能把2000年识别为闰年,即在该计算机系统的日历中没有2000年2月29日这一天,而是直接由2000年2月28日过渡到了2000年3月1 日;另外,在一些比较老的计算机系统中,在程序中使用了数字串99(或99/99等)来表示文件结束、永久性过期、删除等一些特殊意义的自动操作,这样当1999年9月9日(或1999年4 月9日即1999年的第99天)来临时,计算机系统在处理到内容中有日期的文件时,就会遇到99或99/99等数字串,从而将文件误认为已经过期或者将文件删除等错误操作,引发系统混乱甚至崩溃等故障。人们把这个历史遗留下来的日期处理错误导致的危机成为“千年虫”。

  1997年,信息界开始拉起了“千年虫”警钟,并很快引起了全球关注。世界各国纷纷由政府出面,全力围歼“千年虫”。

  首个被“千年虫”侵袭的国家是西非国家冈比亚,除不少地方电力供应中断外,预计未来数月,海空交通、金融和政府服务亦大受影响,其中财政部、税局和海关更因而无法运作。总部设在华盛顿的国际千年虫合作中心表示,冈比亚出现千年虫祸,其实是意料中事,皆因国际社会太迟帮助冈比亚除虫。

  在中国,北京市计算机2000年问题办公室从1日至3日已经接到十几个求助电话,反映自己的电脑出现了千年虫问题。一位魏小姐的炒股机不能工作了;王先生的某国内知名品牌的电子记事本里几百个电话号码一夜之间不见了……紧接着香港也传来报道:著名的7-Eleven便利连锁店星期一遭到类似千年虫的计算机漏洞的袭击。这个连锁店的计算机把2001年当成1901年,使许多使用信用卡的用户感到不便。便利店一发言人说,星期二晚上他们已经控制了事态,星期三,商店已经开始正常营业。1999年,它对千年虫作了充分的准备,总共投入了880万美元对付千年虫。对于这次出现的同样是由计算机计时系统引起的问题,连锁店发言人说;“这的确是一个非常特殊的事件。我们已经对计算机系统做了近万次测试,工作一直正常,直到星期一。”

  而另一个计算机时间处理机制遗留下来的问题如果没有修正,将会在2038年出现,被称为“2038年问题”。问题的根源在于32位的Unix操作系统和Linux操作系统的时间溢出。

  C语言中用 time_t 来代表时间和日期,time_t 是整数(int)型的,它用来记载从1970年1月1日到2000年所经历的秒数。这个数据是以32位存储的,第一位是符号位,其余的31位用来存数字,而这31位数字可以存储的最大数字为2147483647。从1970年开始计算,这31位的数字可以表示的秒数最多可以用到2038年01月19日03时14分07秒,当时间到达这个数字的时候系统将会出现问题,到时候数字不会自动增加,而是会为-2147483648,而这串数字代表的时间是1901年12月13日20时45分52秒,这会导致很多的程序出现问题,甚至崩溃。

  2038年问题不仅比千年虫更隐蔽,而且比之前千年虫问题更具有破坏力,因为千年虫问题只会导致应用层的程序出现问题,比如信用卡支付系统,或者管理系统。而2038这个bug,将会影响系统最底层的时间控制的功能。要解决这个问题,最简单的方式是扩展Unix时间的长度,用64位数字来表示它。64位二进制数的实际可用位数是63位,最大表示到公历的UTC时间292,277,026,596年12月4日15时30分08秒. 如果那个时候人类文明还存在的话,公元纪年很可能已经因为太难用而被抛弃了. 理想的情况是到2038年,64位系统已经成为主流,从而避免特意去修正这个问题所需要的大量开销。否则,人们就必须把新的64位时间拆分成两部分并分别保存在两个变量里,这是一个麻烦而且效率低下的选择。
 
参考自百度百科

千年虫与2038年问题相关推荐

  1. “千年虫问题”、“2038年问题”、什么是闰年

    (1)先温习一下什么是闰年(Leap Year) 闰年是公历中的名词.闰年分为普通闰年和世纪闰年. 普通闰年:能被4整除但不能被100整除的年份为普通闰年.(如2004年就是闰年,1999年不是闰年) ...

  2. 2038年问题 linux内核5.6,又一个“千年虫”问题!Linux Kernel 5.6已着手应对

    原标题:又一个"千年虫"问题!Linux Kernel 5.6已着手应对 新十年伊始,Linux Kernel 5.6 的开发者已经准备好着手解决将在下一个十年到来的 2038 年 ...

  3. 2038年问题 linux内核5.6,Linux Kernel 5.6 开发者已准备好应对 2038 年问题

    2038 年问题与千年虫问题类似,它可能会导致某些软件在 2038 年 1 月 19 日 3 时 14 分 07 秒之后无法正常工作.届时,在大部分 32 位操作系统上,依据 "time_t ...

  4. 2038年问题 linux内核5.6,Linux Kernel 5.6 开发者已率先做好准备 应对 2038 年问题

    新十年伊始,Linux Kernel 5.6的开发者已经准备好着手解决将在下一个十年到来的2038年问题(又称"Y2038"或"Unix Y2K"问题).Lin ...

  5. 聊一聊2038年问题

    庚子年是中国传统的 60 甲子纪年法.擅长观测的古人很早就发现,每当年份执行到庚子这一年,自然灾害变多,突发事件频频,一些震动世界.影响安定的大事件也容易发生在这一年.而我们现在所处的 2020 年就 ...

  6. 2038计算机系统,2038年问题

    2038年问题是指在使用POSIX时间的32位计算机应用程序上,格林尼治时间2038年1月19日凌晨03:14:07(北京时间:2038年1月19日中午11:14:07)之后无法正常工作. 中文名 2 ...

  7. 洛谷 P2655 2038年问题

    P2655 2038年问题 题目描述 网络时代,机会与危机共存."千年虫"解决之后,会不会有新的"虫"出现?回答是肯定的,"2038年"就是 ...

  8. 千年虫,2038年虫

    计算机2000年问题,又叫做"2000年病毒"."千年虫"."电脑千禧年问千年虫题"或"千年病毒".缩写为"Y ...

  9. Linux 5.10将解决2038年问题

    Linux 5.10将解决2038年问题 新添功能以支持时间戳直至 2486 年_IT专家网

最新文章

  1. 以比特币现金(BCH)为核心的慈善经济体系革新业态
  2. 10你当前无权访问该文件夹_「文件保密小技巧」教你创建一个别人打不开也无法删除的文件夹...
  3. FileItem API详解及演示
  4. tensorflow打印模型结构_社区分享 | 详解 TensorFlow 中 Placement 的最后一道防线 — Placer 算法...
  5. halcon/c++接口基础 之 HALCON图像变量类
  6. 公司安排员工扫地,引发员工不满,程序员:保洁阿姨都请不起?
  7. TreeMap1.8源码
  8. Python数据可视化1.5 可视化图像
  9. java子网划分_IP地址子网划分_动力节点Java学院整理
  10. latex插入图像,插入跨栏图像
  11. opencv特效编辑之雕刻效果
  12. c语言谭浩强第八章函数PPT,清华大学C语言谭浩强第八章.ppt
  13. cmd关闭kill进程
  14. SpringMVC---- SpringMVC返回JSON数据
  15. SV--随机约束(一)
  16. 农业节水自动灌溉 ic射频卡机井灌溉控制器智能取水
  17. php获取ascii的值,php chr() ord() 获取ASCII编码 中文截取
  18. 把数字翻译成字符串python_把数字翻译成字符串
  19. 基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)
  20. 冰河远程控制软件使用

热门文章

  1. 引入第三方sdk错误提示
  2. 洗拖一体机好用吗?实用的家用洗地机推荐
  3. 如何在H5页面上添加音乐播放
  4. hdu1873 看病要排队哦
  5. 导热系数常见测量方法
  6. 解决Win11登录Microsoft账户一直转圈问题
  7. win 7 系统(x64)安装vs2012时遇到的问题
  8. 由先序中序得后序,中序后序得先序代码实现
  9. FitLine+直线拟合+C++
  10. math_常用放缩不等式及其变形@指数@对数@三角函数@一次函数