时间这件小事

 Nov. 25, 2012, 12:13 a.m.   12 comments    linux Windows 时间

今天因为一些原因换上了备用的一块硬盘,运行了一下Windows,晚上再开Linux时,发现系统时间变了,整整比原来晚了8个小时,很明显是时区的问题。

简单查了一下,没想到在时间的问题上Windows和Linux竟然有着截然不同的做法。

对于Linux来说,系统里有两个时钟:硬件时钟系统时钟。硬件时钟是计算机主板所维护的时钟,而系统时钟则是Linux内核所维护的时钟,Linux系统启动时从硬件读取时间,然后二者就分道扬镳了。

通常硬件时钟设置为UTC时间(Coordinated Universal Time),数值上与GMT(Greenwich Mean Time)相等,Linux系统以硬件时钟的时间为基础,根据事先设置的时区,生成相应的系统时间。之后任何对系统时间做的改动都不会影响到硬件时钟。

而对于Windows来说,事情被「简化」了,系统时钟硬件时钟,硬件时钟的时间也就是localtime,任何对系统时间做的改动都会写入硬件时钟。

这样就很好理解发生在我的电脑上的现象了,当我使用Windows时,Windows系统将我原本设置为UTC的硬件时钟时间作为当前的localtime并进行了NTP同步,也就是调快了8个小时(东八区),并写入了硬件时钟。

当我再次启动Linux时,Linux却将此时间当作UTC时间,在此基础上又调快了8个小时,这就造成显示的时间比实际时间快了8个小时的错误。


s.sn.giraffe

s.sn.giraffe Dec. 14, 2012, 11:35 p.m. Reply

挺差异的,你竟然用了这么久才发现……

Chon

Chon Dec. 14, 2012, 11:40 p.m. Reply

好久没有换回Windows了...

s.sn.giraffe

s.sn.giraffe Dec. 14, 2012, 11:44 p.m. Reply

这样……


s.sn.giraffe

s.sn.giraffe Dec. 14, 2012, 11:44 p.m. Reply

挺诧异的,你竟然用了这么久才发现……


Athena

Athena Dec. 16, 2012, 1:12 p.m. Reply

于是可以在linux上换个时区么?我在suse下遇到过这个问题,然后改了硬件上的时间,开win又不对了。。。

Chon

Chon Dec. 16, 2012, 6:24 p.m. Reply

解决办法是让windows也使用UTC,需要改一下注册表,你Google一下吧~


Athena_Yin

Athena_Yin Dec. 17, 2012, 9:25 p.m. Reply

好的呢~

Chon

Chon Dec. 17, 2012, 11:07 p.m. Reply

看~耶耶耶

Athena

Athena Dec. 17, 2012, 11:30 p.m. Reply

喵的。。。。


Athena_Yin

Athena_Yin Dec. 17, 2012, 9:26 p.m. Reply

啊哈!用ie6居然读不出我的信息了,耶耶耶/

Chon

Chon Dec. 17, 2012, 10:50 p.m. Reply

明明是IE8!


horizon

horizon Sept. 3, 2013, 9:27 a.m. Reply

同样遇到这个问题,每次都是手动调。。