解决Linux,Windows双系统互相切换后Windows时间错误

问题解析

时间错乱的原因是由于Linux和Windows对硬件时间的处理方式不同,Linux默认将硬件时间视为UTC时间,而Windows默认将硬件时间视为本地时间。因此,当我们在Linux和Windows之间切换时,硬件时间会发生变化,Linux使用UTC时间后自动校准会回写数据,使得Windows时间错乱。

解决方法

如果设备上安装了多个操作系统,它们会从同一个硬件时钟生成自己的当前时间;在这种情况下,建议将硬件时钟设为 UTC,以避免各操作系统之间的冲突。如果硬件时钟使用的是本地时间,那可能会有多个操作系统同时修改硬件时钟(如进行夏令时调整),导致修正过度;另外,在跨多个时区出行的场景下,使用其中一个操作系统重置系统/硬件时钟也可能会产生问题。

摘自Archlinux wiki 第四节

1. Windows系统中修改注册表

用管理员权限打开cmd,运行以下命令:

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

此命令将Windows系统的硬件时间视为UTC时间,和Linux保持一致。

2. Linux系统中修改配置文件

通过 timedatectl 命令可以查看并设置硬件时间。通过下面命令查看 Arch 系统当前硬件时钟的时间标准:

1
timedatectl | grep local

指令打印结果:

1
RTC in local TZ: no

硬件时间设置为loaclTime

1
timedatectl set-local-rtc 1

硬件时间设置成 UTC:

1
timedatectl set-local-rtc 0