什么是Y2038虫

大家应该对Y2K虫也就是千僖虫比较清楚吧,这次千僖虫2代腾空出世,贯名为Y2038虫。

Y2038虫有什么危害?

作个小测试,将计算机的系统时间调整到2038年1月19日03:14:07以后的任意一个时间,看看会有多少错误框弹出来。在我的机器上Kaspersky Anti-Virus Personal和Tor都崩溃了,而据说Yahoo Messenger也会崩溃。

为什么会出现这种现象?

这要归功于C语言的标准时间库(Standard Time Library),因为这个库使用32bit来存储时间数值,而起始值0则是从1970年1月1日12:00:00开始,所以当时间数值达到这个库允许存储的最大值,也就是2的31次方时(其中一位用来存储正负,所以为31次方),唰,整个世界混乱了。

为什么叫Y2038虫?

1970年1月1日12:00:00加上2的31次方是哪一天哪一分哪一秒?2038年1月19日03:14:07,我们的Deadline!
SQL> column “Deadline” for a20
SQL> select to_date(‘19700101120000’, ‘YYYYMMDDHH24MISS’) +
2 (POWER(2, 31) – 1) / 3600 / 24 “Deadline”
3 from dual;

Deadline
——————–
2038-1-19 15:14:07

还好,到那一天还有三十多年,有的是时间让软件厂商推出64bit的补丁来弥补这个问题。:D

9 thoughts on “什么是Y2038虫

  1. kamus,我试验过了,我的系统啥事都没有。我还让我几个朋友都试验了,也是啥事都没有。

    怎么回事?

  2. Jin,你的redmag全部都是原创?很有artical感觉的一个站点,链接已加

    5哥,也不是所有软件都有问题,或者说你修改完以后,软件没有使用time_t函数也不会出问题。

Leave a Reply

Your email address will not be published. Required fields are marked *