person

如题,安装双系统后出现时间问题的人不在少数,原理其实很简单:

  • 电脑是硬件,系统是软件,RTC/CMOS 记录的是不包含时区信息的硬件时间,而系统记录的是包含以上信息的软件时间;
  • Linux 默认使用 UTC 计时,即在硬件时间的基础上根据时区计算时间,而 Windows 使用的是本地时间,也就是跟硬件时间一样;
  • 不巧的是中国在东八区,即 UTC+8 时区,Linux 联网获取 UTC 时间后写入 RTC/CMOS,系统再把时间 +8 显示给用户,用户看到的时间并没有错,但是重启到 Windows 后,因为 Windows 直接读取硬件时间,因此就少了 8 小时。

本文理论及实践参考 Archlinux 论坛,解决方案有两个:

  1. 修改 Linux 设置,让系统使用本地时间;
  2. 修改 Windows 注册表,让系统使用 UTC 时间。

Linux

使用 timedatectl status 命令查看当前设置,修改前:

time-before.jpg

使用命令 timedatectl set-local-rtc 1 ,修改后:

time-after.jpg

下方显示警告信息称更改时区或夏令时时可能会导致问题,建议用回 UTC 时间。如果真的遇到问题,运行 timedatectl set-local-rtc 0 即可。

Windows

以管理员权限运行 CMD 或 Powershell,执行以下命令:

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

这条命令在注册表中新建了一个名为 RealTimeIsUniversal 的 DWORD 值,并将值设置为 1.

之后需要禁用时间的自动更新。

虽说不论 Linux 还是 Windows,从安全的角度更推荐使用 UTC 时间,但是从设置的便捷性考虑,我更倾向于在 Linux 下操作。

相关文章

新评论