Linux 与 Windows 双系统时间同步指南
Linux/Windows 双系统时间相差 8 小时问题解决
问题描述
在双系统(Arch Linux + Windows)环境下,从 Linux 重启进入 Windows 后,Windows 系统时间会比实际时间慢 8 小时。反之亦然。
根本原因
两个操作系统对硬件时钟(RTC,Real Time Clock)的时间标准处理方式不同:
| 操作系统 | 默认硬件时钟标准 |
|---|---|
| Windows | 本地时间(localtime) |
| Linux | UTC(协调世界时) |
当你处于东八区(UTC+8)时:
- Linux 将硬件时钟存为 UTC 时间,启动时加上 8 小时偏移显示为本地时间。
- Windows 直接读取硬件时钟作为本地时间,不再加偏移。
因此,如果 Linux 将硬件时钟写为 UTC 时间(比如 12:00),Windows 启动后直接当作本地时间读取,显示为 12:00,而实际本地时间应该是 20:00,差了正好 8 小时。
解决方案
方案一:让 Windows 使用 UTC(推荐)
修改 Windows 注册表,让 Windows 也把硬件时钟视为 UTC。
方法 A:命令行(推荐)
以管理员身份打开 PowerShell 或命令提示符,执行:
1 | |
方法 B:注册表文件
创建一个文本文件,命名为 utc-time.reg,内容如下:
1 | |
双击该文件导入注册表。
方法 C:手动操作注册表编辑器
- 按
Win + R,输入regedit,回车。 - 导航到路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation - 在右侧空白区域右键 → 新建 → DWORD (32位) 值。
- 命名为
RealTimeIsUniversal。 - 双击该值,将数据设为
1(十六进制)。 - 重启 Windows。
注意
- 重启后可能需要重新同步一次时间(Windows 设置 → 时间和语言 → 日期和时间 → 立即同步)。
- 建议在 Windows 中关闭自动时间同步,避免与 Linux 端的 NTP 服务冲突。路径:设置 → 时间和语言 → 日期和时间 → 关闭”自动设置时间”。
- 如果 Windows 要求因 DST(夏令时)更新时钟,可以允许,它只会修正显示时间,硬件时钟仍保持 UTC。
方案二:让 Arch Linux 使用本地时间
在 Arch Linux 终端中执行:
1 | |
验证设置是否生效:
1 | |
恢复为 UTC
如果以后想恢复 Linux 使用 UTC:
1 | |
注意事项
- 此方案在切换时区或夏令时调整时可能产生问题。
- systemd 从 v216 开始,当 RTC 设为本地时间时,不再自动将系统时间同步回硬件时钟,以避免干扰 Windows。
- FAT 文件系统的时间戳将被视为 UTC。
推荐做法总结
| 方案 | 优点 | 缺点 |
|---|---|---|
| Windows 使用 UTC(推荐) | 符合国际标准,无夏令时问题,多时区友好 | 需要修改 Windows 注册表(操作简单) |
| Linux 使用 localtime | 操作简单,一行命令 | 夏令时、时区切换时可能出问题 |
推荐使用方案一,一劳永逸。
相关命令备忘
Linux 端
1 | |
Windows 端
1 | |
参考链接
Linux 与 Windows 双系统时间同步指南
https://tingfeng347.github.io/2026/07/27/Linux 与 Windows 双系统时间同步指南/