解决Windows与Linux双系统中系统时钟错乱的问题

标签: linux ; windows ;


问题的根源在于,Windows默认使用本地时钟(RTC),而Linux默认使用UTC时钟。UTC时钟是全球统一时钟,需要校正时区偏移才能得到正确的本地时间。比如,中国的时区为东8区,需要在UTC时间的基础上加8个小时,才是正确的本地时间。

操作系统会把系统时间同步到硬件(主板)。当Linux把UTC时间保存在系统主板中,在启动到Windows中,Windows以为系统时间是RTC,不加时区校正原样显示到系统中,于便比正确的本地时钟慢了8小时。当Windows通过网络时间同步得到正确的系统时间,再把系统时间当作本地时间写入硬件后,启动到Linux中。Linux以为硬件时间是UTC时间,于是再把它加上8个小时显示给用户,于是,用户看到的时间就比正确的时间快了8小时。

解决的办法有2:

  1. 将Linux时间设置为本地时间(不推荐)
timedatectl set-local-rtc 1 --adjust-system-clock

可以通过运行timedatectl查看时间配置,如果看到“RTC in local TZ: yes”则表示,系统使用的是本地时钟,而不是UTC。

如果想要使用下面的方法2,可以通过下面的命令将系统时间重新设置为UTC:

timedatectl set-local-rtc 0
  1. 将Windows调整为使用UTC(推荐)

以管理员身份运行PowerShell,执行以下命令:

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f