为什么同一台机器上的两个操作系统有一个小时的时钟差?

为什么同一台机器上的两个操作系统有一个小时的时钟差?

我的机器有两个操作系统,一个 Linux 发行版(主要)和一个 Windows 7(很少使用)。

两个操作系统都设置在我的时区 (UTC+1)。

根据我在 BIOS 上设置时间的方式,Windows 要么显示当前时间比当前时间早 1 小时,要么显示 Linux 比当前时间晚 1 小时。

为什么会发生这种情况?

Windows 机器通常启动时就断开与互联网的连接;而 Linux 机器则连接互联网,因此它会在短时间后更正日期,但重新启动后,它会再次配置错误。

编辑:发现它与https://serverfault.com/questions/16107/why-does-ubuntu-9-04-reset-my-windows-clock

答案1

我能想到这里可能存在的几个问题。

首先,您可能在其中一个系统中启用了夏令时,而在另一个系统中没有启用,或者您的一个操作系统配置了错误的时区。

Linux 可能假设您的计算机的硬件时钟设置为 UTC 而不是本地时间,而 Windows 可能认为它设置为本地时间。如果您处于 UTC+1 或 UTC-1,您可能会看到这种行为。Linux 可能会加载硬件时钟的值,将其调整为本地时间,然后在关机时将其转换回 UTC,然后再写入硬件时钟。

答案2

您的 Linux 发行版假定您的 BIOS 时钟使用 UTC,而您的 Windows 安装假定您的 BIOS 时间是当地时间。

以下是我在双启动笔记本电脑上进行设置的说明:我对 Linux 端进行更改,使用本地时间而不是 UTC 作为系统时钟。首先,运行一个命令,以便在 Linux 端正确设置时间,如下所示root

date -s "2 feb 2016 18:05:15"

hwclock --hctosys --localtime应将 BIOS 日期/时间设置复制到您的计算机并将其设置为本地时间。hwclock --systohc --localtime应将 BIOS 时间设置为本地时间而不是 UTC。我建议使用date上面的命令设置时间,然后运行:hwclock --systohc --localtime 并运行:hwclock --hctosys --localtime 以确保 /etc/adjtime 的文件最后一行显示“LOCAL”而不是“UTC”或类似内容。这些--hctosys --localtime标志一起可以通过编程方式完成此操作。单独执行此操作是可能的date,但我没有检查过。

检查系统时间是否确实是本地时间的准确时间。不要担心日期设置字符串的格式,它非常灵活。以下是其他有效表达方式的示例:

date -s "2 feb 2016 6:05:15 PM"
date -s "february 2, 2016 6:11:30 PM"
date -s "Tue Feb  2 18:11:30 EST 2016"

(我使用的是东部标准时间,GMT -5)

如果仍有问题,您可能需要重新选择时区。在 Debian 或类似 Ubuntu 的衍生版本中,您可以使用sudo dpkg-reconfigure tzdatancurses 界面来更改时区。

如果你没有这个文件,请尝试找到相关的时区信息文件。在我的安装中,它是/usr/share/zoneinfo/America/Indiana/Indianapolis

找到后,将其复制到/etc/localtime

cp /usr/share/zoneinfo/America/Indiana/Indianapolis /etc/localtime

执行此操作后,我会确保时间设置仍然date正确。如果不是,请再次运行前两个命令(datehwclock)。

在 Linux 中应该可以做到,无论你在 Linux 中设置什么时间,都可以正确地与 Windows 共享。或者,也可以这样做,但更难的是将 Windows 设置为使用 UTC。如何做到这一点会随着版本而变化,并且众所周知,Windows 在更新后会恢复到本地时间。

我记得有一台特别顽固的计算机,它所做的所有hwclock事情都被覆盖了,因为它正在使用 NTP 通过互联网获取当前时间。时区设置是解决这个问题的唯一方法,而无需完全禁用 NTP。

无论如何,这只是我过去处理此事的所有经验的汇总。其中一个几乎肯定会起作用。我会先尝试时区的东西,然后hwclock --systohc --localtime在完成后再尝试这些东西,以确保 BIOS 时钟处于本地时间。

相关内容