在世界之交的时候,有一种有名的计算机问题——千年虫。
千年虫:
计算机2000年问题,又叫做“千年虫”、“电脑千禧年千年虫问题”或“千年危机”。缩写为“Y2K”。是指在某些使用了计算机程序的智能系统(包括计算机系统、自动控制芯片等)中,由于其中的年份只使用两位十进制数来表示,因此当系统进行(或涉及到)跨世纪的日期处理运 算时(如多个日期之间的计算或比较等),就会出现错误的结果,进而引发各种各样的系统功 能紊乱甚至崩溃。因此从根本上说千年虫是一种程序处理日期上的BUG,而非病毒。
千年虫问题:
和本世纪初的千年虫(Y2K Bug)问题类似,LINUX系统千年虫问题又称为2038年问题(Y2K38 BUG)。如果你想知道什么是2038问题的话,你需要知道一些技术上的东西。这个bug是由用来写linux的c语言引起的,c中用time_t来代表时间和日期,time_t是整数(int)型的,它用来记载从1970年1月1日到2000年所经历的秒数。
这个数据是以32位存储的,第一位是符号位,其余的31位用来存数字,而这31位数字可以存储的最大数字为2147483647。
从1970年开始计算,这31位的数字可以表示的秒数最多可以用到2038年,当时间到达这个数字的时候系统将会出现问题,到时候数字不会自动增加,而是会变为-2147483647,而这串数字代表的时间是1901年12月13号,这会导致很多的程序出现问题,甚至崩溃。
2038年问题不仅比千年虫更隐蔽,,而且比之前千年虫问题更具有破坏力,因为千年虫问题只会导致应用层的程序出现问题,比如xyk支付系统,或者管理系统。而2038这个bug,将会影响系统最底层的时间控制的功能。
要解决这个问题,最简单的方式是扩展UNⅨ时间的长度,用64位数字来表示它. 64位二进制数的实际可用位数是63位,最大表示到公历的UTC时间292277026596年12月4日. 如果那个时候人类文明还存在的话,公元纪年很可能已经因为太难用而被抛弃了. 理想的情况是到2038年,64位系统已经成为主流,从而避免特意去修正这个问题所需要的大量开销. 否则,人们就必须把新的64位时间拆分成两部分并分别保存在两个变量里,这是一个麻烦而且效率低下的选择.
在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。32位 *** 作系统的最后时间是2038年1月19日03:14:07,星期二。而这一秒过后,Time_t的值将变成-2147483647,代表的是1901年12月13日8:45:52pm,这样32位软硬件系统的日期时间显示就都乱套。2038问题:Time_t是C/C++等编程语言在内部代表/存储日期和时间的一种数据类型。Time_t实际上是一个代表秒数的整数。当初设计的时候,这个4字节的时间格式把1970年1月1日凌晨0时0分0秒作为时间起点,这时的时间值为0。以后所有的时间都是从这个时间开始一秒一秒累积得来的。比方说如果时间已经累积到了919642718这个数值,就是说这时距离1970年1月1日凌晨0时0分0已经过去了919642718秒,换算一下就应该是1999年2月21日星期天16时18分38秒。这样计算时间的好处在于,把任意两个时间值相减之后,就可以很迅速地得到这两个时间之间相差的秒数,然后你可以利用别的程序把它换算成明白易懂的年月日时分秒的形式。要是曾经读过一点儿关于计算机方面的书,就会知道一个4字节也就是32位的存储空间的最大值是2147483647。请注意!2038年问题的关键也就在这里——当时间一秒一秒地跳完2147483647那惊心动魄的最后一秒后,会发生什么?答案是,它就会转为负数也就是说时间无效。那一刻的准确的时间为2038年1月19日03:14:07am(GMT)星期二,之后所有用到这种“标准时间库”的C/C++语言程序都会碰到时间计算上的麻烦。超过此一瞬间,时间将会被掩盖(wrap around)并且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依个别实例而跳回1970年或1901年,错误的计算及动作可能因此产生。比如手机网络工作不正常,卫星脱离轨道,型号较老的电脑软件软硬件无法正常工作等。这就是2038年问题。在linux中: date [mmddhhmm[yyyy]] 改日期和时间,如将系统时间改为12月12日12时12分打开终端输入: date 12121212 然后在终端中输入date回车看看改了...欢迎分享,转载请注明来源:内存溢出
评论列表(0条)