今天因为一些原因换上了备用的一块硬盘,运行了一下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个小时的错误。
Leave a Comment