机器时钟

在微机硬件中有一个实时系统时钟,它依靠微机主板上的纽扣电池作为电源和动力,时刻保持运转,这样微机在关机时也能够保持时间前进。这个实时系统时钟的时间数值是保存到主板BIOS中的存储器(CMOS)中的。当微机启动时,微机操作系统从BIOS的那个时间存储器里读取当前时间,包括四位数的年份以及月份、日、小时、分钟、秒等,从此,只要不关机,操作系统的时钟就会以微机外接电源(不再是主板上的纽扣电池)为动力单独向前运转,并保存在微机的内存中(不再是BIOS中的存储器)。
微型计算机的Y2K问题
微机的2000年问题主要表现在,尽管RTC—实时系统时钟中使用了四位数来表示年份,但其年份数据的前两位(世纪信息,如“19”,“20”等)并不和后两位发生联系,也就是说,当后两位从“99”变为“00”时,并不能向前进位使前两位数由“19”变为“20”,这样,RTC中1999年的下一年便应该是1900年,从而引发了2000年问题。 而对于目前应用的操作系统(如DOS 5.0以上版本、Windows 3.x 、Windows95、 Windows 98以及 Linux 、SCO Unix、Windows NT)时钟来说,其年份都是用四位数来表示的,因此不会存在2000年问题。但目前的问题是操作系统中附带的一些小实用程序、工具或函数调用,有可能因为年份表示不完整而引起千年虫发作。

千年虫主要集中发作于两个方面: 一个是配备比较早(大约在80年代中期以前投入使用)的主机上的应用系统,如在IBM 4381,IBM AS/400等机型上运行的应用程序。这些机器系统国际上都应用的相当早,因此其上面的应用程序经过十余年的开发和发展其规模已经非常庞大,比如美国的AT&T电讯公司,其内部就有超过3.6亿行的应用程序需要检测是否存在2000年问题,这确实是很大的工作量,因此给解决2000年问题造成了极大的麻烦。 千年虫另外一个容易发作的方面是嵌入式设备。所谓嵌入式设备,就是指设备中使用了智能芯片的系统,由于智能芯片价格低廉,目前嵌入式设备已变成无处不在,由生产线、大量的自动化仪器仪表、汽车、电梯、警报系统、消防检测器到医疗设备,以至电话交换机、空调机、交通灯、恒温器等,可谓渗透到日常生活每个角落。这些设备中应用的程序往往都已经固化到元器件中,因此一旦产品只使用了两位数来表示年份,就会引发2000年问题,而要替换这些芯片,又往往不得不把整个系统都替换,这会造成资金和操作上的困难,使解决2000年问题更加麻烦,也是无法按时解决2000年问题的隐患之一。

Y2K问题给2000年造成的危害还是挺大的,随着时间的推移2038年问题也引起了人们的注意。。。。

2038年问题

2038年问题-维基百科

和21世纪初的千年虫(the Millennium bug)问题类似,32位的Unix操作系统和Linux操作系统时间溢出问题又称为2038年问题(the Year 2038 problem)。如果你想知道什么是2038问题的话,你需要知道一些技术上的东西。这个bug是由用来写Unix/Linux的C语言引起的,C语言中用 time_t 来代表时间和日期,time_t 是整数(int)型的,它用来记载从1970年1月1日到2000年所经历的秒数。

在2038年的问题是在该时间值存储或计算为计算和数据存储的情况下的一个问题符号的32位整数,并且因为这个00:00:00数被解释为秒数UTC 1 1970年1月(在历元)。[1]这样的实现不能在19后3点14分07秒UTC编码倍2038年1月,类似但不完全类似于一个问题2000年问题(也被称为千年虫),其中2位的值代表数字年自1900年以来未能编码2000年或以后。大多数32位的 类Unix系统来存储和处理在这段时间Unix时间格式,因此2038年的问题是有时被称为Unix的千年虫的关联。

原理

在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用 POSIX (可移植性操作系统接口 )时间表示时间的程序都将受其影响,因为它们的时间起点是格林尼治时间1970年1月1日0时0分0秒(这个时间名叫 the Unix Epoch),它们用the Unix Epoch经过的秒数(忽略闰秒)来表示时间。这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。在大部分的32位操作系统上,此“time_t”数据模式使用一个有符号32位整数(signed int32)存储计算的秒数。依照此“time_t”标准,在此格式能被表示的最后时间是第2147483647秒(代表格林尼治时间2038年1月19日凌晨03:14:07)。下一秒,即格林尼治时间2038年1月19日凌晨03:14:08,由于32位整型溢出,时间将会被“绕回”(wrap around)成一个负数,变成了第 -2147483648 秒(代表格林尼治时间1901年12月13日20:45:52),造成应用程序发生严重的时间错误,而无法运行。

引文

The latest time that can be represented in Unix’s signed 32-bit integer time format is 03:14:07 UTC on Tuesday, 19 January 2038 (2,147,483,647 seconds after 1 January 1970).[2] Times beyond that will wrap around and be stored internally as a negative number, which these systems will interpret as having occurred on 13 December 1901 rather than 19 January 2038. This is caused by integer overflow. The counter runs out of usable digit bits, flips the sign bit instead, and reports a maximally negative number (continuing to count up, toward zero). Resulting erroneous calculations on such systems are likely to cause problems for users and other relying parties.
Programs that work with future dates will begin to run into problems sooner; for example a program that works with dates 20 years in the future will have to be fixed no later than 2018.

上面说到2038年问题将会逐渐的解决直到2018年,但是就目前的时间来推算,似乎还存在着很大的问题。

Y2K问题和2038问题相关推荐

  1. 32树莓派_你觉得树莓派的32位系统到了2038年会出现故障吗?

    刚刚在做项目,当写到日期方面的代码时偶然想到为什么时间都要以1970年开始,于是查阅了相关资料才了解到其中的细节. 为什么计算机和一些电子产品的时间选择在1970年?​www.zhihu.com 在阅 ...

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

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

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

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

  4. 时间戳,2038年计算机要面临的问题(代码演示)

    本章介绍时间戳,时间戳的定义.时间戳问题.危机详细分析.计算机2038年要面临的问题.代码模拟以及回顾2000年千年虫危机. 目录 1.  时间戳的定义 2.  时间戳危机 3.  详细分析 4.  ...

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

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

  6. 千年虫,2038年虫

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

  7. 千年虫 2038问题

    千年虫问题: 计算机2000年问题,又叫做"千年虫"."电脑千禧年千年虫问题"或"千年危机".缩写为"Y2K".是指在某 ...

  8. 什么时候是世界末日?Unix的世界是2038年1月19日

    如果你在苹果智能语音助手 Siri 里面提问:什么时候是世界末日呢?怕是会得到一个令人感慨和有爱的回答:Unix 32位计算器的末日可能是在 2038年1月19日发生,或许就在那时. 这一切到底是怎么 ...

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

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

  10. 有关SwfUpLoad的2038 错误

    项目需要用到大文件上传.最后选择了开源的swfupload作为上传空间,dome都运行非常良好.到了把它放到我的项目当中的时候. 出现了# 2038 error. 仔细观察后发现上传文件超过4mb就不 ...

最新文章

  1. 宏基因组蚂蚁森林合种——胡杨专车
  2. intel x540-at2 openstack 下桥接故障
  3. setInterval()方法只执行一次的解决方法
  4. 查看win10剩余激活时间
  5. Activity的启动流程
  6. java.util.UnknownFormatConversionException: Conversion = ‘j‘ || Conversion = ‘D‘ || Conversion = ‘Y‘
  7. 四、pink老师的学习笔记——元素的显示与隐藏
  8. 多学一招总没错吧?SpringBoot解决前后端分离的跨域问题
  9. Cisco ftp linux 权限,在Cisco设备上利用FTP传IOS文件
  10. WeLink的杀手锏和远程办公软件的另一面
  11. linux下tomcat8安装
  12. 时间穿越问题:时间因速度引力而不同,空间又无法精确定位
  13. 《计算机组成原理》第五版(唐朔飞考研版) 全书知识梳理
  14. 华为android界面强刷救砖教程,华为P9刷机失败变砖开不了机了怎么办 华为P9救砖方法...
  15. 布料仿真先导2-带阻尼的单个小球单摆下的拉格朗日方程列些和matlab仿真
  16. bilinear函数c语言怎么实现,bilinear和bicubic的算法封装
  17. 调用QQ与陌生人聊天
  18. lisp 圆柱螺旋线_AutoCAD.Lisp等距3D螺旋线
  19. 【C进阶】之动态内存分配及内存操作函数
  20. 米的换算单位和公式_英寸和厘米的换算、英尺和米的换算及英寸和毫米的单位换算公式...

热门文章

  1. 【比特熊故事汇】2月MVP英雄故事|有爱的开源
  2. 在ubuntu用wine安装微信 并解决无法输入文字的问题 ubuntu完美安装微信
  3. Ubuntu 20.04 Micosoft edg 浏览器安装教程
  4. 以太坊Solidity编程中你不知道的单位
  5. Android作业分组与选题
  6. Unity开发VR项目(二)——SteamVR按键设置
  7. 工业大数据的关键技术是什么
  8. 【mirror】国内镜像站,没事翻一翻
  9. SAS逻辑回归之二分类
  10. IntelliJ IDEA里面配置任何路径的时候路径里面的反斜杠分隔符变成了钱币符号