如何修复 Windows 和 Linux 在双启动时显示不同的时间

您的计算机将时间存储在其主板上的硬件时钟中。即使计算机关闭,时钟也会记录时间。默认情况下,Windows 假定时间以本地时间存储,而 Linux 假定时间以 UTC 时间存储并应用偏移量。这会导致您的操作系统之一在双启动情况下显示错误的时间。
要解决这个问题,您有两个选择:让 Linux 使用本地时间,或者让 Windows 使用 UTC 时间。不要按照说明的两个步骤进行操作,否则他们仍然不会说同一种语言!如果可能,我们建议您让 Linux 使用本地时间。
选项一:让 Linux 使用本地时间
让 Linux 像 Windows 一样使用本地时间可能是最好的选择。 Windows 确实有一个注册表设置,强制它以 UTC 时间存储时间,但据报道它没有得到很好的支持,并且可能会导致一些第三方应用程序出现问题,这些应用程序总是假设硬件时钟是本地时间。它还与 Windows 自己的 Internet 时间同步服务不兼容。
使 Linux 系统使用本地时间的步骤因 Linux 发行版而异。但是,在任何带有 systemd 的 Linux 发行版上,您可以使用 timedatectl
命令进行此更改。这适用于现代版本的 Ubuntu、Fedora、Red Hat、Debian、Mint 和其他使用 systemd 的 Linux 发行版。
要进行此更改,请首先在您的 Linux 系统上打开一个终端窗口。运行以下命令将主板上的实时时钟设置为本地时间。 Linux 将以本地时间存储时间,就像 Windows 一样。
timedatectl set-local-rtc 1 --adjust-system-clock

要检查当前设置,请运行:
timedatectl
如果您看到“RTC in local TZ: yes”,Linux 被设置为使用本地时区而不是 UTC。该命令会警告您,此模式未得到完全支持,并且在时区之间切换和使用夏令时时可能会导致一些问题。但是,这种模式可能比 Windows 中的 UTC 选项得到更好的支持。如果您使用 Windows 双启动,Windows 将为您处理夏令时。

如果您想撤消此更改,请运行以下命令:
timedatectl set-local-rtc 0 --adjust-system-clock

选项二:让 Windows 使用 UTC 时间
让 Windows 像 Linux 一样使用 UTC 时间可能不是最好的选择。您可以编辑注册表以使 Windows 使用 UTC 时间,但这可能会导致比仅让 Linux 使用本地时间更多的问题。
如果您确实想要这样做,您首先要禁用 Windows 上的 Internet 时间更新功能。这确保 Windows 在尝试从 Internet 同步当前时间时不会错误地设置时钟。在 Windows 10 上,前往“设置”>“时间和语言”并禁用“自动设置时间”。在 Windows 7 上,右键单击任务栏中的系统时钟并选择“调整日期/时间”。单击“Internet 时间”选项卡,单击“更改设置”按钮,取消选中“与 Internet 时间服务器同步”选项,然后单击“确定”。

通过编辑注册表使 Windows 使用 UTC 时间
您现在需要将适当的值添加到 Windows 注册表中。这是我们的标准警告:注册表编辑器是一个强大的工具,滥用它会导致您的系统不稳定甚至无法运行。这是一个非常简单的黑客攻击,只要您按照说明进行操作,就不会有任何问题。也就是说,如果您以前从未使用过它,请考虑在开始之前阅读有关如何使用注册表编辑器的信息。在进行更改之前,一定要备份注册表(和您的计算机!)。
首先,单击“开始”,键入“regedit”,然后按 Enter 键打开注册表编辑器。同意出现的安全提示。

导航到注册表编辑器左窗格中的以下键:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation
在最新版本的 Windows 10 上,您可以将以上行复制并粘贴到地址框中。但是,此 hack 也适用于 Windows 7。

右键单击“TimeZoneInformation”键并选择“新建”>“DWORD(32 位)值”。

将您的新值命名为 RealTimeIsUniversal
。

双击您刚刚创建的 RealTimeIsUniversal
值,将值数据设置为 1
,然后单击“确定”。
你现在已经完成了,你可以关闭注册表编辑器。 Windows 将以 UTC 格式存储时间,就像 Linux 一样。

如果您想撤消此更改,请返回注册表中的此位置,右键单击您添加的 RealTimeIsUniversal
值,然后将其从注册表中删除。
下载我们的一键式注册表黑客

如果您不想自己编辑注册表,可以使用我们可下载的注册表 hack。我们创建了一种让 Windows 使用 UTC 时间的 hack,以及一种将其恢复为本地时间的 hack。两者都包含在以下 ZIP 文件中。只需下载文件,双击您要使用的 hack,然后同意将信息添加到您的注册表中。
让 Windows 使用 UTC 时间
上面的技巧和我们上面描述的一样。 Make Windows Use UTC Time hack 创建了值为“1”的“RealTimeIsUniversal”条目,而 Make Windows Use Local Time hack 删除了“RealTimeIsUniversal”条目。
如果您想查看此或任何其他 .reg 文件的作用,请右键单击它并选择“编辑”以在记事本中查看该文件。您可以轻松制作自己的注册表 hack,它仅包含一个注册表项列表,以在格式正确的列表中添加、编辑和删除。
在 Mac 上双启动 Windows 怎么样?
尽管 Apple 的 macOS 像 Linux 一样使用 UTC 时间,但在 Mac 上的 Boot Camp 中运行 Windows 时,您不必做任何特殊的事情。 Apple 的 Boot Camp 驱动程序处理一切。 (不过,Hackintosh 双启动程序是另一回事,并且必须尝试使用上面的 Windows 注册表调整。)
如果你想知道为什么 Windows 像其他操作系统一样使用本地时间而不是 UTC,微软官方博客 The Old New Thing 在这里解释。简而言之,它是为了保持与 Windows 3.1 系统的向后兼容性,并防止人们在设置计算机 BIOS 中的时间时感到困惑。当然,PC 制造商选择本地时间与 Windows 兼容,而 Windows 选择本地时间与 PC 制造商选择的决策兼容,因此循环变得自我强化。
目前没有标准来标记在 BIOS 或 UEFI 固件中时间是存储为 UTC 还是本地时间,这可能是最合乎逻辑的解决方案。但这需要一些工作,而且大多数人甚至不会注意到不同的操作系统使用不同的时间格式——双引导配置除外。