技术中心
 
 

大胆预测2038年电脑公司问题始末

   日期:2009-07-29     来源:互联网    
大胆预测2038年电脑公司问题始末

现在,由于受到媒体的广泛关注,2000年问题已经为大多数人所理解。

大多数以C编程语言编写的程序基本不再受2000年问题的影响,但又受到了2038年问题的困扰。出现此问题的原因是,大多数C程序都使用称为标准时间库的例程库。这个库建立了一套用于存储时间值的标准4字节格式,并提供了用于转换、显示和计算时间值的大量函数。

标准4字节格式假定:时间开始于1970年1月1日中午12:00:00。那一刻的时间值为0,任何时间/日期值都以该零值之后经过的秒数来表示。所以,值919642718表示1970年1月1日中午12:00:00之后经过了919,642,718秒,即太平洋时间(美国)的1999年2月21日星期日的16:18:38。这是一种方便的格式,因为只要将两值相减,您就可以得到代表它们之间时间差的秒数。然后,您可以使用库中的其他函数来确定这两个时间之间相差多少分/小时/天/月/年。

如果读过位与字节一文,您就会知道,带有正负符号的4字节整数能够表示的最大值是2,147,483,647,这就是2038年问题的源头。在反转成负值(因而无效)之前,时间的最大值是2,147,483,647,转换过来就是2038年1月19日。在那一天,任何使用标准时间库的C程序都将开始遇到日期计算方面的问题。

幸运的是,在大型机上,这个问题的解决要比2000年问题略微容易一些。编写规范的程序只需使用新版本的库(例如,使用8字节值的存储格式)重新编译一次就可以了。之所以能够这样解决此问题,是因为库将整个时间活动和自己的时间类型与函数封装在一起。这与多数大型机程序不同,那些程序没有对自己的时间格式或计算进行标准化。所以,解决2038年问题就不会像解决2000年问题那么困难了。


一位思维敏捷的读者善意地指出,IBM PC硬件会受到2116年问题的困扰。对于PC机来说,时间开始于1980年1月1日,并以无正负符号的32位整数的形式按秒递增,这与UNIX时间非常类似。到2116年,这个整数将溢出。
Windows NT使用64位整数来计时。但是,它使用100纳秒作为增量单位,且时间开始于1601年1月1日,所以NT将遇到2184年问题。

苹果公司声明,Mac在29,940年之前不会出现时间问题!

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢