同步 Windows 和 Linux 的时间

Re:Linked

Windows 默认认为硬件时间是本地时间,而 Linux 默认认为硬件时间是 UTC 时间。因此,如果没有设置自动时间同步的话,对于在东八区的双系统用户来说,经常会有 Linux 时间正常而 Windows 慢了八小时,或者 Windows 时间正常而 Linux 快了八小时的情况出现。

让 Linux 与网络同步时间

请先安装 ntp

运行 sudo ntpdate cn.ntp.org.cn (或其它 NTP 服务器)以同步时间。

如果想开机自动进行网络时间同步的话,运行 sudo systemctl enable ntpdate.service 以启用开机同步时间。

修改 ntp 所用的上游 NTP 服务器

如果时间同步太慢(几秒钟左右是正常现象),可以选择更换上游 NTP(网络授时协议)服务器。在 /etc/ntp.conf 中比较靠前的位置,写入:

1
server cn.ntp.org.cn

让 Windows 与网络同步时间

进入控制面板(找不到的,在 Win+R 弹出的「运行」对话框中输入 control ,点击确定,以打开控制面板)。打开「日期与时间」,选择「Internet 时间」标签,点击「更改设置」按钮。

在弹出窗口中可以立即进行时间同步或配置自动时间同步。服务器仍然可以选择 cn.ntp.org.cn

同步出错的,可以到 services.msc 「服务」中查看是否 “Windows Time” 服务被关闭了。如果是,请启动服务后再试。

真正的解决方案

妥协 Windows

注意:在 Windows 7 之前的系统中不建议这么做

让 Windows 把硬件时间当作 UTC 即可。操作方法:

在注册表编辑器(regedit.exe)中,找到注册表项

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

在右侧新建名为 “RealTimeIsUniversal” 的 DWORD 值,并将其设置为1。

亦可将以下内容保存为 .reg 文件后双击直接导入。

1
2
3
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
“RealTimeIsUniversal”=dword:00000001

之后重启计算机。

妥协 Linux

作为一名更常用 Linux 作为工作环境的用户,Outvi 并没有测试这一部分,故无法确定此部分内容的有效性。

运行

1
sudo timedatectl set-local-rtc 1

将硬件时间设置为本地时间即可。

如何给硬件时间对时?

对于 Windows,设置系统时间后,硬件时间会被自动设置。

对于 Linux,在调好系统时间和时区后,运行:

1
sudo hwclock --systohc --utc

即可。


评论