自从我开始在 Windows 上双启动 Linux 后,我注意到当我重新启动计算机时,另一个操作系统上的时间是错误的,例如,Linux 上的时间是 12:00,然后我重新启动,Windows 上的时间是 18:00,而当我检查 BIOS 时,RTC 设置为 18:00。由于我的时区是 -06:00 CST,我假设 Linux 只是将 RTC 的时间设置为 UTC 并根据时区重新计算时间,而 Windows 只是将 RTC 设置为本地时间。两者都使用相同的 NTP 服务器来同步时间。
问题是,哪一个做对了?我应该在哪一个上将时区设置为 UTC,以便两者都有正确的时间?
答案1
两者都没错,但使用 UTC 更正确。RTC 没有时区;它只是一个愚蠢的挂钟。如果您的本地时区遵循 DST(其中有很多种,规则任意更改),那么每年两次,您必须去更改它。操作系统会为您完成此操作,但如果 RTC 是 UTC,操作系统无论如何都会进行 UTC->本地转换——为什么要摆弄时钟?此外,在 DST“回退”转换期间,RTC 无法告诉您现在几点了!现在是 CDT 还是 CST 凌晨 1:30?
显然,Windows 8 支持 UTC对于 RTC。Windows 7 也一样,但是存在问题。
有一个更好的反对这个的论点那时人们是手动设置 BIOS 时钟的,但现在基于服务器的时间更为普遍。
答案2
我最近遇到了同样的问题,这是我修复它的方法。您需要在两个操作系统上都做一些更改。
我首先从 Linux 开始。以 root 身份运行以下命令。
ntpdate pool.ntp.org
如果设置不正确,这将更新您的时间。
现在使用此命令将硬件时钟设置为 UTC。
hwclock --systohc --utc
现在启动 Windows 并添加以下注册表。只需在记事本中使用以下代码创建一个 .reg 文件即可。保存并运行它。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001
从下次启动开始,两个操作系统都会显示正确的时间。
答案3
正常情况下,Linux 系统将 RTC(实时时钟)设置为 UTC,并根据时区数据和TZ
环境变量在用户空间中转换为本地时间。这“没那么糟糕”,因为它使系统 RTC 单调递增,并在稍后应用任何时区魔法,例如确保将来没有文件正常情况下会有时间戳(如果系统 RTC 设置为本地时间,这种情况很容易每年至少发生一次)。正如 Ken 指出的那样,RTC本身没有时区的概念,只有时间。
正如您所发现的,这会导致在与通常不以这种方式运行的系统进行双启动时出现问题,例如 Microsoft 系列操作系统通常希望将 RTC 设置为当地的时间。是的,Windows NT(实际上我认为可以追溯到 NT 4)能将 RTC 设置为 UTC 就可以了,但至少我上次查看时发现它并不是一个真正受支持的配置,而且存在许多注意事项。
在你的情况下,简单的解决方案可能是将 RTC 设置为本地时间,告诉你的 Linux 系统 RTC 已设置为本地时间(具体执行机制因发行版和发布版本而异,但显然在 Ubuntu 中你UTC=no
在 /etc/default/rcS 中设置),然后配置操作系统,以便只有一其中(最好是你最常用的那个,因为其他所有设备上显示的时间每年都会有两次不正确,直到它被启动并有机会纠正它)处理夏令时变化。并忍受其缺点,这些缺点在单用户系统上应该是可以管理的。
您还可以将 Windows 端设置为使用 UTC 作为时区,并关闭 Windows 中的自动夏令时更改,并保持 Linux 设置为使用 UTC 的 RTC 并根据其惯例显示转换的时间。但是,这将导致 Windows 显示 UTC 中的日期和时间,这可能不是您真正想要的。对于我们欧洲人来说,这不是什么大问题,我们最多与 UTC 相差三个小时,但在美国可能是一个更大的问题。如果您只是偶尔使用 Windows,并且您的主要操作系统是 Linux 或其他支持 RTC-UTC 的操作系统,这可能是更现实的选择。
答案4
选择你自己的冒险!
您可以在 Linux 或 Windows 11 上修复它(如果您已经在那里!)
Windows 11
我喜欢的解决方案,感谢您来到这里。
打开管理员 cmd 控制台(Search
-> "cmd"
-> Right click
on "Command Prompt"
-> Run as administrator
)。然后输入命令:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
它将添加一个注册表项,使一切正常运行。最后,为了避免重新启动等(修复当前时间),只需单击Settings
-> Time & Language
-> Date & Time
-> Set time automatically
->Off
然后On
再次单击(就像在 中一样IT crowd
)。
Linux
输入此命令(但它可能会搞乱夏令时计算!请注意您居住在哪个国家!)。
timedatectl set-local-rtc 1 --adjust-system-clock
撤消此运行
timedatectl set-local-rtc 0
参考来源https://ubuntuhandbook.org/index.php/2021/06/incorrect-time-windows-11-dual-boot-ubuntu/