适用系统

Windows 10/11 + Ubuntu 20.04/22.04

问题背景

在 Windows 和 Ubuntu 双系统环境下,切换系统时经常会发现时间相差数小时。这主要是因为 Windows 和 Ubuntu 对硬件时钟(RTC)的处理方式不同。

Windows 默认将硬件时钟(RTC)视为本地时间(Local Time),而 Ubuntu 默认将硬件时钟视为协调世界时(UTC),并根据时区转换为本地时间。这种差异就导致两个系统读取同一硬件时钟时显示的时间不同。本文将提供一种快速解决方案,通过同步时间服务器并修正硬件时钟模式,彻底解决此问题。

解决方案步骤

步骤 1:安装必要工具

首先,要确保系统中包含时间同步和硬件时钟操作所需的工具。在终端中输入以下命令:

sudo apt update
sudo apt install util-linux-extra ntpdate

这里解释一下这两个工具:

  • util-linux-extra:它提供了 hwclock 命令的完整功能,部分系统可能默认未安装。

  • ntpdate:用于手动同步网络时间,因为 Ubuntu 默认的时间同步服务 systemd-timesyncd 可能无法直接覆盖硬件时钟。

步骤 2:手动同步网络时间

接着,我们使用 Windows 官方时间服务器来校准 Ubuntu 系统时间。在终端输入:

sudo ntpdate time.windows.com

其原理是直接向 time.windows.com 同步时间,确保 Ubuntu 与 Windows 的时间源一致。需要注意的是,如果提示 no server suitable for synchronization found,可以尝试更换其他时间服务器,比如 ntp.aliyun.com

步骤 3:将系统时间写入硬件时钟(RTC)

然后,强制将 Ubuntu 的当前系统时间(已校准为本地时间)写入硬件时钟。输入以下命令:

sudo hwclock --localtime --systohc

其中,--localtime 表示指定硬件时钟使用本地时间模式,会覆盖默认的 UTC 模式;--systohc 则是将系统时间同步到硬件时钟。

步骤 4:验证硬件时钟模式

之后,我们要检查硬件时钟是否已切换为本地时间模式。在终端输入:

sudo hwclock --show

输出时间应与 date 命令显示的本地时间一致。例如:

2023-10-01 15:30:00+08:00   # Ubuntu 系统时间(date 命令)
2023-10-01 15:30:00         # 硬件时钟时间(hwclock 命令)

步骤 5:修复 Windows 注册表(可选)

如果 Windows 时间仍异常,可能是其强制使用了 UTC 兼容模式。这时需要删除相关注册表项,具体操作如下:

  1. 在 Windows 中以管理员身份打开命令提示符。

  2. 运行以下命令:

reg delete "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /f

验证一致性

Ubuntu 中验证

在 Ubuntu 终端输入:

timedatectl && sudo hwclock --show

确保输出中 RTC in local TZ: yes

Windows 中验证

  • Win + R,输入 cmd 打开命令提示符。

  • 运行 time /tdate /t,检查时间是否与 Ubuntu 一致。

注意事项

时区设置

要确保 Ubuntu 的时区与 Windows 一致。可以在终端输入以下命令:

sudo timedatectl set-timezone Asia/Shanghai  # 替换为实际时区

时间同步服务

  • 若需长期保持时间精准,重新启用 Ubuntu 自动同步:

sudo timedatectl set-ntp true
  • 推荐在 BIOS 中启用网络时间同步(如果支持的话)。

硬件时钟权限

hwclock 命令报错,尝试更新工具:

sudo apt install --reinstall util-linux

原理解析

  • 硬件时钟(RTC):主板上的物理时钟,依赖电池供电,记录时间数据。

  • Windows 行为:直接读取 RTC 作为本地时间,无时区转换。

  • Ubuntu 默认行为:读取 RTC 为 UTC,再根据系统时区转换为本地时间。

通过 hwclock --localtime 强制 Ubuntu 以本地时间模式读写 RTC,使双系统时间基准一致,从根本上解决问题。

结语

以上方法通过校准时间源、修正硬件时钟模式,彻底解决双系统时间差异问题。操作简单且无需复杂配置,适用于大多数场景。如有疑问,欢迎在评论区留言交流!