找回密码
 新注册用户
搜索
查看: 2658|回复: 4

2038 年问题

[复制链接]
发表于 2009-12-13 13:10:59 | 显示全部楼层 |阅读模式



在计算机应用上,2038年问题可能会导致某些软件在2038年1月19日3时14分07秒之后无法正常工作。

所有使用POSIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。

这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。

在大部份的32位操作系统上,此「time_t」数据模式使用一个有正負號的32位元整數(signed int32)存储计算的秒数。

依照此「time_t」标准,在此格式能被表示的最后时间是2038年1月19日03:14:07,星期二(UTC)。

超过此一瞬间,时间将会被掩盖(wrap around)且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依個別實作而跳回1970年或1901年。

错误的计算及动作可能因此产生。


目前并没有针对现有的CPU/操作系统搭配的简单解决方案。直接将POSIX时间更改为64位模式将会破坏对于软件、数据存储以及所有与二进制表示时间相关的部份的二进位兼容性。

更改成无符号的32位整数则会影响许多与两时间之差相关的程序。


大部份64位操作系统已经把time_t這個系統變數改為64位寬。

不過,其他現有架構的改動仍在進行中,不過預期「應該可以在2038年前完成」。

然而,直到2006年,仍然有数以亿計的32位系统在運行中,特別是许多嵌入式系统。

相对于一般电脑科技18至24个月的革命性更新,嵌入式系统可能直至使用寿命终结都不会改变。

32位time_t的使用亦被编码于文件格式,例如众所周知的ZIP压缩格式。其能存在的时间远比受影响的机器长。


新的64位运算器可以记录至约2900亿年后的292,277,026,596年12月4日15:30:08,星期日(UTC)。
回复

使用道具 举报

 楼主| 发表于 2009-12-13 13:11:59 | 显示全部楼层
什么?2012 呢?
回复

使用道具 举报

发表于 2009-12-13 15:42:13 | 显示全部楼层
那时全都是64位的了,不过嵌入式的确实是个问题,但是嵌入式的应该很少用得到30年吧
回复

使用道具 举报

发表于 2009-12-13 16:39:36 | 显示全部楼层
还有块30年时间
应该没啥问题的
zip之类时间调回去然后解压缩出来就行了...
何况重要的资料一般不会用压缩算法的吧,不方便修复的
回复

使用道具 举报

发表于 2009-12-13 17:09:03 | 显示全部楼层
对呀,9几年还老是说千年虫呢,到了2000年还是解决了,不要说这个这么久后的事了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-9-30 03:35

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表