解决 Linux 和 Windows 双系统时间错误问题

Bittersweet 转载2016-5-16
本文最后更新于 1244 天前(2016-5-16),其中的信息可能已经有所发展或者不再适用于现阶段。
本文全长 611 字,全部读完大约需要 2 分钟。

前一段时间刚装了 ubuntu 和 Win7 的双系统。发现 Win7 的系统时间不对,机子没上网,每天开机时,总会慢 8 小时,不知道怎么回事,因为忙别的事情,所以过了那几天才找原因,后来发现 Windows time 服务没有自动,所以想当然认为是这个原因。

用了几次也没发现什么异常,因为今天开机时候没插网线,直接进了 ubuntu,发现时间快了 8 小时,插上网线就正常了,所以觉得不太正常,所以重启进了 Win7,发现慢了 8 小时,这才意识到可能是两个系统设置不同,导致的这个时间问题。于是 google:

两个概念:

UTC 即 Universal Time Coordinated,协调世界时 GMT 即 Greenwich Mean Time,格林尼治平时

Windows 与 Mac/Linux 缺省看待系统硬件时间的方式是不一样的:

Windows 把系统硬件时间当作本地时间(local time),即操作系统中显示的时间跟 BIOS 中显示的时间是一样的。 Linux/Unix/Mac 把硬件时间当作 UTC,操作系统中显示的时间是硬件时间经过换算得来的,比如说北京时间是GMT+8,则系统中显示时间是硬件时间 +8。

这样,当 PC 中同时有多系统共存时,就出现了问题。

假如你的 Linux 设置的时区都为北京时间东八区,当前系统时间为 9:00AM。则此时硬件中存储的实际是 UTC 时间 1:00AM。这时你重启进入 Windows 后,你会发现 Windows 系统中显示的时间是 1:00AM,比 Linux 中慢了八个小时。同理,你在 Windows 中更改或用网络同步了系统时间后,再到 Linux 中去看,系统就会快了 8 小时。 在实行夏令时的地区,情况可能会更复杂些。

解决这个问题的方法:

  1. 可让 ubuntu 不使用 UTC 时间与 Windows 保持一致。

ubuntu 默认开启 UTC,即协调世界时,而 Win7 是使用这种计时方式,这将导致的结果就是 Windows 和 ubuntu 时间计算有差异。

你可以使用以下方法得到一致的时间:

sudo gedit /etc/default/rcS

找到这一行:

UTC=yes

把 yes 改为 no。

在 fedora(我是 fedora 13)下,一次打开 System–>Administration–>Date & Time,在 Time Zone 选项卡下把System clock uses UTC 前面的勾去掉,确定。稍微过几分钟系统时间就正常了。

  1. 修改 Windows 对硬件时间的对待方式,这样只在 Windows 上修改后就无需在Ubuntu 上设置了。

让 Windows 把硬件时间当作 UTC。

开 始->运行->CMD,打开命令行程序(Vista则要以管理员方式打开命令行程序方可有权限访问注册表),在命令行中输入下面命令并回车:

Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

本文转自网络。