初音
光坂基金会
光坂基金会
  • 注册日期2010-05-29
  • 最后登录2015-10-10
  • 生日1990-10-3
  • 光玉722颗
阅读:1041回复:13

[讨论]计算机世界的末日?

楼主#
更多 发布于:2011-04-14 10:32
不知道大家有没有发现,绝大多数操作系统、应用软件、数据库、网站的“日期显示”或者“日期设置”,其极限为2038年1月19日。
那么在2038年1月19日之后呢,相信我们当中的绝大多数人应该还是活着的。所以这一天迟早要经历。
可以做个小实验,把系统的时间调到2038年1月19日,看看会有多少程序崩溃,有多少软件无法使用,比如登陆上IM,给好友发个消息,IM就将崩溃。
事实上那一天还不止会发生这些事情,手机网络工作不正常,卫星脱离轨道等等。
也许有人觉得2038年还早着,无需担心这个问题。不幸的是,上世纪60年代的程序开发人员也抱有类似的错误想法,并由此造就了千年虫。给全球IT业带来惨重损失,同时也给非洲的冈比亚等国家带来了灭顶之灾。
造成这种问题的原因,在于有那么一种变量类型 long ,或是 __int32 。对于32位的数据来说,它所能表示的范围在 0 ~ 0xFFFFFFFF 之内,以十进制表示就是 -2147483648 ~ 2147483647 ,事实上,我们通常只用到了正数的部分,也就是21亿多。而用它来表示时间的话,也就是21亿秒,也就是68年。
也许有人会说那个时候也许人们早就用上256位的系统了。但是仍会有许多使用中的32位甚至更古老的系统。即使是在32位系统盛行的今天,大多数嵌入式系统仍是8位或16位的,而小型嵌入式系统的数量其实比台式机更多。


而现在的计算机系统的时间都是从1970年算起的。不信大家可以试试,无论怎么设置,都不可能把时间设置到1969年的。这主要归功于 time_t 变量类型。在非常权威的MSDN中关于函数 time 的描述如下:


The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970, coordinated universal time, according to the system clock. The return value is stored in the location given by timer. This parameter may be NULL, in which case the return value is not stored.



这段话的意思只有一个:系统只能从1970年开始计时。那么1970年开始往后数21亿秒,就是2038年1月19日。

我们还可以用C++来验证
#include <stdio.h>#include <time.h>
void main(){    struct tm TheLastDay = { 7, 14, 3, 19, 0, 138 }; // 秒 分 时 日 1+月 1900+年    struct tm TheNextSecOfTheLastDay = { 8, 14, 3, 19, 0, 138};    time_t TheLastSec, TheNextSecOfTheLastSec;    TheLastSec = mktime( ;TheLastDay );    TheNextSecOfTheLastSec = mktime( ;TheNextSecOfTheLastDay );    printf("用 time_t 计时的最后一刻是:%s", asctime( ;TheLastDay ));    printf("自 1970/01/01 00:00:00 共经历了 %d 秒,或者 0x%X 秒\n",        TheLastSec, TheLastSec);    printf("再过一秒,经历的时间就变为:%d 秒,或者 0x%X 秒\n",        TheNextSecOfTheLastSec, TheNextSecOfTheLastSec);}

输出结果如下:
用 time_t 计时的最后一刻是:Tue Jan 19 03:14:07 2038自 1970/01/01 00:00:00 共经历了 2147454847 秒,或者 0x7FFF8F7F 秒再过一秒,经历的时间就变为:-1 秒,或者 0xFFFFFFFF 秒

所以,下一个千年虫根本不用等1000年,20年就够了。
喜欢0 评分0
bleen
光坂学士生
光坂学士生
  • 注册日期2010-05-28
  • 最后登录2022-02-21
  • 生日1988-12-9
  • 光玉2111颗
沙发#
发布于:2011-04-14 11:23
在学计算机网络的时候就提到了,放心吧,位数会增加的,现有设备的淘汰速度没有想象中那么慢,比起以前来。。。
回复(0) 喜欢(0)     评分
翔天飞影
光坂学士生
光坂学士生
  • 注册日期2009-08-21
  • 最后登录2023-09-08
  • 生日1989-6-14
  • 光玉3901颗
2楼#
发布于:2011-04-14 11:51
我这好像能设到2099年,不过没敢保存。。
回复(0) 喜欢(0)     评分
红绯鱼
光坂硕士生
光坂硕士生
  • 注册日期2011-03-13
  • 最后登录2023-07-19
  • 生日1991-2-11
  • 光玉7105颗
3楼#
发布于:2011-04-14 13:28
额,这么可怕的样子啊!!
回复(0) 喜欢(0)     评分
mooncrazy
学生会会长
学生会会长
  • 注册日期2010-12-28
  • 最后登录2024-05-05
  • 生日1989-8-9
  • 光玉11146颗
4楼#
发布于:2011-04-14 13:46
作为一个电脑盲也管不了这许多啦
回复(0) 喜欢(0)     评分
桜舞雪咒
学生会会长
学生会会长
  • 注册日期2009-05-01
  • 最后登录2021-10-30
  • 生日1991-3-23
  • 光玉11781颗
5楼#
发布于:2011-04-14 15:23
到时候肯定会有办法的会更新的
回复(0) 喜欢(0)     评分
s5105222
光坂学士生
光坂学士生
  • 注册日期2010-02-22
  • 最后登录2013-07-21
  • 生日1992-1-4
  • 光玉4035颗
6楼#
发布于:2011-04-15 08:36
現在不是進步得很快嗎?
[fly][/fly]
回复(0) 喜欢(0)     评分
涟司辉夜
光坂硕士生
光坂硕士生
  • 注册日期2009-09-16
  • 最后登录2023-08-04
  • 生日1992-1-16
  • 光玉5427颗
7楼#
发布于:2011-04-15 09:17
嘛 ...  这个不是咱担心的 自有后来人 ╮(╯▽╰)╭
三千世界鸦杀尽 与君共寝到天明
回复(0) 喜欢(0)     评分
ct一剑
光坂博士生
光坂博士生
  • 注册日期2010-10-04
  • 最后登录2014-08-21
  • 生日1991-10-16
  • 光玉13939颗
8楼#
发布于:2011-04-15 16:18
时代在发展.这些总有办法避免的
回复(0) 喜欢(0)     评分
凌晨三点钟
光坂三年生
光坂三年生
  • 注册日期2010-10-01
  • 最后登录2012-08-17
  • 生日1950-1-1
  • 光玉551颗
9楼#
发布于:2011-04-15 20:46
嘛..表示完全不担心啊
回复(0) 喜欢(0)     评分
Еlysees
光坂硕士生
光坂硕士生
  • 注册日期2010-05-09
  • 最后登录2016-06-02
  • 生日1990-3-4
  • 光玉9497颗
10楼#
发布于:2011-04-16 17:34
世界的末日比计算机的要早
回复(0) 喜欢(0)     评分
shaya
学生会会长
学生会会长
  • 注册日期2009-05-01
  • 最后登录2024-05-02
  • 生日1988-3-18
  • 光玉11900颗
11楼#
发布于:2011-04-17 01:53
当年千年虫不是解决了,到时一定会有相应措施的。
家族麻将群欢迎各位喜欢日麻的朋友(←点我加入),不会也没关系,会有人教
(口胡,明明是日常、游戏、动漫聊天群,麻将群不打麻将是常识【拍飞】)
回复(0) 喜欢(0)     评分
梓空
光坂基金会
光坂基金会
  • 注册日期2009-07-05
  • 最后登录2012-09-19
  • 生日1992-5-18
  • 光玉6990颗
12楼#
发布于:2011-04-22 20:47
表示不大理解计算过程
回复(0) 喜欢(0)     评分
豆腐
光坂大学生
光坂大学生
  • 注册日期2010-02-18
  • 最后登录2023-01-22
  • 生日1991-11-9
  • 光玉1820颗
13楼#
发布于:2011-04-26 18:49
从来没发现过,不是我的末日就好- -
[IMG]http://img4.picbed.org/uploads/2012/09/3801213fb80e7bec3eb5235a2f2eb9389b506b19.jpg[/IMG]
回复(0) 喜欢(0)     评分
游客

返回顶部