在看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