首页 上一页 1 2 下一页 尾页

软件中的2038问题讨论 点击:1982 | 回复:33



如火

    
  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-07-27 14:43:00
楼主
  在谈论2038问题时,我们要知道,并不是wonderware软件会有2038问题,基本上所有的软件(跟时间有关),从大规模的ERP、MES到自动化组态软件、办公软件、聊天软件,从大型工作站到我们用的手机通讯都可能会出现2038问题,所以我们不要太惊慌,但也不能回避。


  资料中显示Y2038 bug将于2038年1月19日(星期二)03:14:07am(GMT)正式爆发,届时人们对千年虫问题的预言可能将一一实现,比如手机网络工作不正常,卫星脱离轨道,型号较老的电脑软件软硬件无法正常工作等。

[b]  什么是Y2038 bug[/b]

  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的值,也就是说t_time只能用31位二进制数来表示(第一位用来表示正负号),而其最大值转换为十进制是2147483647,换算成日期和时间刚好是2038年1月19日03:14:07am(GMT),而这一秒过后,t_time的值将变成-2147483647,代表的是1901年12月13日8:45:52pm,这样32位软硬件系统的日期时间显示就都乱套了。另外,无法接受time_t为负值的其他功能也将返回错误。

  举个实际的例子来说,登陆上Yahoo messenger,给好友发个消息,恩没问题,现在把系统时间更改为2038年1月19日03:14:07am,此时如果再发消息Yahoo messenger就将崩溃。

[b]  为何担忧?[/b]

  也许有人觉得2038年还早着,无需担心这个问题。不幸的是,上世纪60年代的程序开发人员也抱有类似的错误想法,并由此导致了Y2K问题,给全球IT页带来数十亿美元的损失。

  要知道时间对于许多电脑程序来说都非常重要,操作系统、数据库程序、电子表格软件、实时控制系统等无不涉及到时间。因此我们必须在Y2038 bug爆发前做好充足的准备。

  尽管到2038年,桌面PC和服务器基本上都将升级到64位甚至128位,但仍会有许多使用中的32位甚至更古老的系统。即使是在32位系统盛行的今天,大多数嵌入式系统仍是8位或16位的,而小型嵌入式系统的数量其实比台式机更多。

[b]  如何应对?[/b]

  Y2038问题和Y2K一样难缠,其中一种解决办法就是用位数更多的数据类型来存储日期和时间。如果使用64位数据类型,time_t最大可以表示公元292000000000年,是宇宙估计年龄的20倍,最起码看到这篇文章的各位都不会再遇到什么YXXXX问题了。

  目前对于Y2038 bug的影响有多大还存在争论,但有一点可以肯定的是:有备无患。相信我们能像克服Y2K问题那样圆满解决Y2038问题。
 
    有人把2038问题称作“千年虫二世”,这个比喻非常恰当。 
 

    用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年十二月十三日黑色星期五下午三点四十五分五十二秒。 



如火

  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-07-27 14:53:00
1楼
下面是程序读取系统时间并显示的运行界面显示:

Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901

yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2006-07-27 14:59:00
2楼
现在谈论2038问题是否早了些?就像2000问题一样,到时候总有解决方案的,2000问题不是一样平稳通过了嘛。当硬件全面支持后,软件也能解决这个问题的。

如火

  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-07-27 15:05:00
3楼
马上就要到2008年了,如果现在上的项目,所用的系统中软件有2038问题,就意味着这个系统30年内必须解决2038问题,否则就会出现或大或小的问题。笔者只是想让大家了解软件的这一问题,至于什么时候解决,根据自己的系统重要性决定即可。

中尉兄

  • 精华:0帖
  • 求助:0帖
  • 帖子:25帖 | 436回
  • 年度积分:0
  • 历史总积分:647
  • 注册:2006年6月05日
发表于:2006-07-27 15:10:00
4楼
这个问题的确应该重视一下

绿洲一号

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2006年7月27日
发表于:2006-07-27 16:54:00
5楼
相信所有电脑问题专家和软硬件厂商都在致力研究2038问题的解决方案,就像Y2K一样,到一定时候,全球都会动员起来,解决此问题。现在一定有很多人以此为课题在攻关,说不定就作出一个象样的东西来呢。

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2006-07-27 16:58:00
6楼
现在可在2039年以后不会报错的监控软件为数不多。
经测试,IFIX3.5 IFIX 4.0软件没有报错!

happyoicq

  • 精华:0帖
  • 求助:0帖
  • 帖子:49帖 | 1382回
  • 年度积分:0
  • 历史总积分:3120
  • 注册:2005年10月16日
发表于:2006-07-27 21:33:00
7楼
是得重视一下了。

yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2006-07-28 09:11:00
8楼
不知道IFIX3.5,IFIX4.0将会不会到2100年就不能用了呢?

疯了

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 121回
  • 年度积分:0
  • 历史总积分:981
  • 注册:2005年11月05日
发表于:2006-07-28 10:09:00
9楼
这个没有经过完全测试,谁也不能说就没有问题,
因为这个是程序设计上的一个问题,一个软件是很多人合力开发的。
如果某一条语句用了就会有问题。
不过我想到了2038年,科技不知道会发展到什么样子,这个问题应该可以解决掉,大家不用太担心

zhongdingjidian

  • 精华:3帖
  • 求助:0帖
  • 帖子:167帖 | 1364回
  • 年度积分:0
  • 历史总积分:2372
  • 注册:2003年5月29日
发表于:2006-07-28 11:05:00
10楼
没有必要担心这个问题

工控大亨

  • 精华:13帖
  • 求助:5帖
  • 帖子:851帖 | 1682回
  • 年度积分:0
  • 历史总积分:5491
  • 注册:2006年1月03日
发表于:2006-07-28 12:07:00
11楼
小问题,到2038年电脑技术不一定到什么水准了呢
没准人类都已经进入共产主义了呢
哈哈

刘静淳

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 231回
  • 年度积分:0
  • 历史总积分:234
  • 注册:2006年4月21日
发表于:2006-07-28 12:43:00
12楼
我觉得这个问题真的很棘手,真希望软硬件方面的高手齐心协力把她决绝掉,不过再过三十年的话,我们这些人也该退休了,还是希望能在退休以前,能把这个2038问题解决,也要为下一代着想啊。

京中阆子

  • 精华:0帖
  • 求助:0帖
  • 帖子:29帖 | 229回
  • 年度积分:0
  • 历史总积分:542
  • 注册:2005年12月31日
发表于:2006-07-28 22:43:00
13楼
是到解决的时候了,毕竟马上就到2008了,希望高手们努力啊!

聚沙成塔

  • 精华:0帖
  • 求助:1帖
  • 帖子:85帖 | 654回
  • 年度积分:0
  • 历史总积分:1083
  • 注册:2006年4月15日
发表于:2006-07-29 15:34:00
14楼
希望早日看到问题解决的消息

我们是朋友

  • 精华:1帖
  • 求助:0帖
  • 帖子:29帖 | 226回
  • 年度积分:0
  • 历史总积分:435
  • 注册:2006年2月09日
发表于:2006-07-30 14:23:00
15楼
现用系统有多少能用到2038年很难说

笔笔名

  • 精华:4帖
  • 求助:11帖
  • 帖子:290帖 | 1797回
  • 年度积分:1
  • 历史总积分:3209
  • 注册:2002年3月17日
发表于:2006-07-30 20:54:00
16楼
同意楼上说的!!!顶!!!!!!!!!!

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2006-08-01 13:52:00
17楼
有人谈到2038问题是系统问题,个人认为这其实有偏差!
2038问题在以上也谈到是由于使用了某种数据类型的计数器,且用这种计数器进行相应的时间判断而形成的错误。
就象使用WORD类型数据,置0--65535以外的数据,会出现一些难以预料的结果!
冒然把这种2038问题归结于系统问题,或操作系统问题是难以立足的。
写程序的人完全可以避免以上的问题或用变通的方法来解决!

EMAIL:DENG_LP@21CN.COM
http://blog.sina.com.cn/u/1239831253

朦朦风雨

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 10回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2001年4月16日
发表于:2006-08-01 13:52:00
18楼
居安思危,确是我辈之所为!为楼主喝彩!

I/O刷新点

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:36
  • 注册:2006年7月11日
发表于:2006-08-01 17:58:00
19楼
杞人忧天~~~~~~~~!!!!

长翅膀的鱼

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 261回
  • 年度积分:0
  • 历史总积分:359
  • 注册:2006年3月09日
发表于:2006-08-01 18:36:00
20楼
根本没必要讨论!置什么顶啊!

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页