现在的位置: 首页 > 操作系统 > 正文

linux内核里怎么解决的千年虫(Y2K)

2019年03月27日 操作系统 ⁄ 共 407字 ⁄ 字号 评论关闭

在看linux内核源码的时候。

arch/i386/kernel/time.c

get_cmos_time中
...
if ((year += 1900) < 1970)
year += 100;
...
说这么做解决了千年虫问题。。。

不知道这个具体是怎么解决的啊


答:

以前的老计算机,用年份的后两位数表示,如1999年用99表示,99+1900=1999, 

这个year变量只保存了十位和个位。比如,1990年对应80,2009年对应09
在代码的其他地方用到的时候很可能是要加上1900,这样,80就回到了1980,09却被解释成1909
为了解决这个问题,就加个判断,如果是09就加上100变成109,这样09就可以变成1900+109=2009了。
这个判断是基于 (year += 1900) < 1970
这个1970是所谓的unix元年。这种判断的前提是,系统不会处理任何1970年以前的数据,所以小于70的都认为是20xx

【上篇】
【下篇】

抱歉!评论已关闭.