Windows-Linux 双引导设置中显示的时间错误? 这是怎样修复它

如果您双引导 Windows 和 Ubuntu 或任何其他 Linux 发行版,您可能已经注意到两个操作系统之间的时间差异。

当您使用 Linux 时,它会显示正确的时间。 但是当您启动到 Windows 时,它显示了错误的时间。 有时,情况正好相反,Linux 显示错误的时间而 Windows 显示正确的时间。

这很奇怪,因为您已连接到 Internet,并且您的日期和时间设置为自动使用。

别担心! 您不是唯一面临这个问题的人。 您可以在 Linux 终端中使用以下命令修复它:

timedatectl set-local-rtc 1

再说一遍,别担心。 我将详细解释上述命令怎样修复双启动后 Windows 中的错误时间问题。 但在此之前,让我告诉您为什么在双启动设置中会遇到时差。

为什么 Windows 和 Linux 在双启动时显示不同的时间?

计算机有两个主要时钟:系统时钟和硬件时钟。

硬件时钟,也称为 RTC(实时时钟) 或 CMOS/BIOS 时钟。 该时钟位于操作系统之外,位于计算机主板上。 即使您的系统断电,它仍会继续运行。

系统时钟是您在操作系统内部看到的时钟。

当您的计算机开机时,将读取硬件时钟并用于设置系统时钟。 之后,系统时钟用于跟踪时间。 如果您的操作系统对系统时钟进行了任何更改,例如更改时区等,它会尝试将此信息同步到硬件时钟。

默认情况下,Linux 假定存储在硬件时钟中的时间是 UTC,而不是本地时间。 另一方面,Windows 认为存储在硬件时钟上的时间是本地时间。 这就是麻烦开始的地方。

让我用例子来解释。

你看我在加尔各答时区,即 UTC+5:30。 安装后,当我将 Ubuntu 中的时区设置为加尔各答时区时,Ubuntu 将此时间信息同步到硬件时钟,但偏移量为 5:30,因为 Linux 的硬件时钟 (RTC) 必须采用 UTC。

假设加尔各答时区的当前时间是 15:00,这意味着 UTC 时间是 09:30。

现在,当我关闭系统并启动到 Windows 时,硬件时钟具有 UTC 时间(在此为 09:30 example)。 但 Windows 认为硬件时钟已存储本地时间。 因此它会更改系统时钟(应该显示为 15:00)以使用 UTC 时间(09:30)作为本地时间。 因此,Windows 将 09:30 显示为比实际时间晚 5:30 小时的时间(在此为 15:00 example)。

同样,如果我通过切换自动时区和时间按钮在 Windows 中设置正确的时间,您知道会发生什么吗? 现在它将在系统上显示正确的时间 (15:00) 并将此信息(注意图像中的“同步您的时钟”选项)同步到硬件时钟。

如果您启动到 Linux,它会从本地时间 (15:00) 的硬件时钟读取时间,但由于 Linux 认为它是 UTC 时间,因此它会向系统时钟添加 5:30 的偏移量。 现在 Linux 显示时间为 20:30,比实际时间提前 5:30 小时。

现在您了解了双启动中时差问题的根本原因,是时候看看怎样解决这个问题了。

修复 Windows 在使用 Linux 的双引导设置中显示错误的时间

有两种方法可以处理此问题:

  • 使 Windows 使用 UTC 时间作为硬件时钟
  • 让 Linux 使用本地时间作为硬件时钟

在 Linux 中进行更改更容易,因此我建议使用第二种方法。

现在 Ubuntu 和大多数其他 Linux 发行版都使用 systemd,因此您可以使用 timedatectl 命令来更改设置。

您正在做的是告诉您的 Linux 系统使用本地时间作为硬件时钟 (RTC)。 你这样做 set-local-rtc (为 RTC 设置当地时间)选项:

timedatectl set-local-rtc 1

如下图所示,RTC 现在使用本地时间。

现在,如果您启动到 Windows,它将硬件时钟作为本地时间,这实际上是正确的。 当您启动到 Linux 时,您的 Linux 系统知道硬件时钟使用的是本地时间,而不是 UTC。 因此,这次它不会尝试添加偏移量。

这修复了双启动中 Linux 和 Windows 之间的时差问题。

您会看到有关不将本地时间用于 RTC 的警告。 对于桌面设置,它应该不会导致任何问题。 至少,我想不出一个。

我希望我把事情说清楚了。 如果您仍有疑问,请在下方留言。



相关阅读:

Posted in: LinuxTags: