标题:
[交流]
将系统时间调到2038年1月19日,看看会发生什么
[打印本页]
作者:
bugz
时间:
2007-2-18 12:08
标题:
将系统时间调到2038年1月19日,看看会发生什么
大家一定还记得上个世纪末给IT业界带来不少麻烦的Y2K bug吧,很不幸的是,我们很快又将面临另一个和时间有关的bug——Y2038问题。
专家警告说,Y2038 bug将于2038年1月19日(星期二)03:14:07am(GMT)正式爆发,届时人们对千年虫问题的预言可能将一一实现,比如手机网络工作不正常,卫星脱离轨道,型号较老的电脑软件软硬件无法正常工作等。
什么是Y2038 bug
Time_t是C/C++ 等编程语言在内部代表/存储日期和时间的一种数据类型。Time_t实际上是一个代表秒数的整数,当它的值为0时,代表的时间是1970年1月1日12:00:00;当Time_t=60时,则表示1970年1月1日12:01:00,依此类推。
所有32位电脑系统都用带符号32位整型来存储Time_t的值,也就是说Time_t只能用31位二进制数来表示(第一位用来表示正负号),而其最大值转换为十进制是2147483647,换算成日期和时间刚好是2038年1月19日03:14:07am(GMT),而这一秒过后,Time_t的值将变成-2147483647,代表的是1901年12月13日8:45:52pm,这样32位软硬件系统的日期时间显示就都乱套了。另外,无法接受Time_t为负值的其他功能也将返回错误。
举个实际的例子来说,登陆上Yahoo messenger,给好友发个消息,恩没问题,现在把系统时间更改为2038年1月19日03:14:07am,此时如果再发消息Yahoo messenger就将崩溃。
为何担忧?
也许有人觉得2038年还早着,无需担心这个问题。不幸的是,上世纪60年代的程序开发人员也抱有类似的错误想法,并由此导致了Y2K问题,给全球IT业带来数十亿美元的损失。
要知道时间对于许多电脑程序来说都非常重要,操作系统、数据库程序、电子表格软件、实时控制系统等无不涉及到时间。因此我们必须在Y2038 bug爆发前做好充足的准备。
尽管到2038年,桌面PC和服务器基本上都将升级到64位甚至128位,但仍会有许多使用中的32位甚至更古老的系统。即使是在32位系统盛行的今天,大多数嵌入式系统仍是8位或16位的,而小型嵌入式系统的数量其实比台式机更多。
如何应对?
Y2038问题和Y2K一样难缠,其中一种解决办法就是用位数更多的数据类型来存储日期和时间。如果使用64位数据类型,Time_t最大可以表示公元292000000000年,是宇宙估计年龄的20倍,最起码看到这篇文章的各位都不会再遇到什么YXXXX问题了。
目前对于Y2038 bug的影响有多大还存在争论,但有一点可以肯定的是:有备无患。相信我们能像克服Y2K问题那样圆满解决Y2038问题。
大家也可以把自己电脑的系统时间年份改成2038看看效果,运行一下各种软件
作者:
wxyjtlal
时间:
2007-2-18 20:01
会不会出现什么意外呀.我害怕 用过的说话 好吗
作者:
sss1999
时间:
2007-2-19 00:46
我的天啊,以前有个"千年虫".现在又跑来个"三八虫":s_6:
作者:
titi
时间:
2007-2-19 16:40
我调过来了.什么也没发生啊.楼主过节又搞笑.
作者:
chum79
时间:
2007-2-19 19:59
吓了一跳....呵呵...大过年的,这玩笑有意思.
作者:
午夜狂魔
时间:
2007-2-19 20:15
不过真的要预防吗?千年虫是什么还没见过
作者:
sexlonel
时间:
2007-2-19 20:46
管它呢 反正到时候一定会有办法的 大家不怕哦
作者:
coolwzzz
时间:
2007-2-19 23:07
调了 MS什么事情也没有发生啊
作者:
小昆山
时间:
2007-2-23 00:46
杞人忧天!到2038年我的电脑不知道换成什么样了!
作者:
koftian8
时间:
2007-2-23 16:33
遥远的事啊,现在先不管它.
作者:
johnyuan
时间:
2007-2-23 17:04
标题:
回复 #1 bugz 的帖子
哇,不是吧,我会在这一天前把偶的钱统统从银行拿出来~
作者:
millet
时间:
2007-2-23 18:00
2038有没有电脑还是问题了!估计那时都是生物智能电脑了
作者:
秦寿布儒
时间:
2007-2-25 00:09
其实PC上的操作系统早就预见到这个问题了,而且连接Internet的电脑都会定期与Internet时间服务器进行时钟的同步操作,保证了时间的准确性。
而专家们担心的问题主要在于一些嵌入式系统。这些系统的时钟设计并没有那么科学,一旦代表时间的这个长整型数归零了,在很多的操作判断方面就会出很大的岔子了。
作者:
xxxggggg
时间:
2007-2-25 00:47
有备无患嘛,有时间大家去试试
作者:
kkkk007
时间:
2007-2-25 09:11
到时早解决了。30年还解决不了才有鬼。再说30年后的电脑天知道是多少位的了
作者:
canory
时间:
2007-2-25 09:48
我把我电脑设成2099年啦,一点问题都没有。不知道楼主这文章是抄回来的还是你自己试过的呢?
其实这个问题很简单,因为电脑诞生的时候,程序员用了两位十进制去表示一个年份。所以当时2000年会出错,
但是一旦意识到这个问题,windows 2000出来的时候就已经解决了这个问题,很简单,用多两位来表示年份就
可以了。只不过浪费了一点存储空间而已。这至少说明,在系统方面,年份已经不是问题。
那么为什么会导致出错,这就是软件问题,因为有些软件在设计的时候涉及了年份参数,而它们没有做好这个
修改,所以有些软件依然使用两位来表示年份,于是就出错。但是,这其实也不是问题。因为很多软件设计语言
都是基于系统的,我也不信有一个软件可以从第一天诞生,可以使用100年都不更新,每一次更新的时候,只要
把初始年份由系统获得的话,那么在100年内也不会有问题了。
你可以打开你的时钟,看看你能修改到什么年份?如果你用上下箭头来修改,到了2099年再向上的话,就是1900,
也就是说,其实windows在提供系统参数的时候,自身用多于两位整型数值来表示,但是提供给软件应用的时候,
他还是提供了两位整型和以为0/1型而已。换言之,只要你把那个软件在当前系统下编译,只要在2099年前,这
个软件依然不会有问题。那么如果2099年以后呢?很简单,windows锁定在1950-2149,或者锁定在2000-2199,
或者随着时间更改,一直往后锁定,那就保证软件编译时候能基于当前最低年份初始,保证最后锁定年份前能正常运行。
[
本帖最后由 canory 于 2007-2-24 09:00 PM 编辑
]
作者:
sht9567
时间:
2007-2-25 10:17
应该不用担心,我的机器到了那个时候早该淘汰了,更新了……
作者:
云之星
时间:
2007-2-25 10:37
的确太遥远了,还是管好目前的要紧。
作者:
zippo001
时间:
2007-2-25 12:41
呵呵,三八虫,这个说法很有创意~~
作者:
longu_w
时间:
2007-2-25 18:27
我遇到过这个问题,装完系统后什么软件都装不上,很烦的,找了半天,后来才发现是时间的问题
作者:
yl1149
时间:
2007-2-26 01:11
各位老大!好象还没到过愚人节的时候吧!
作者:
tequila_
时间:
2007-2-26 01:52
知道摩尔定律吧,到2038年估计我们已经在用生化电脑了.要么就是在用128位的操作系统(如果还有操作系统这个概念的话),所以...不用担心啦~也许那时候我们担心的是能源匮乏,环境恶化,全球变暖...
作者:
ccy1870
时间:
2007-2-26 09:31
我也试过了,没有什么变化,现有的软件还可以使用,楼主多虑了!
作者:
seshot9
时间:
2007-2-26 10:18
:s_4: 被耍了。感觉不到变化
欢迎光临 SiS001! Board - [第一会所 关闭注册] (http://154.84.5.212/bbs/)
Powered by Discuz! 7.2