我在 UEFI 模式下(安全启动关闭)双启动了 Windows 10 和 Ubuntu 16.04。我在 BIOS 中的时间是正确的。
当我启动 Ubuntu 然后启动 Windows 10 时,它显示错误的时间。我必须在 Windows 10 中手动或通过互联网更正它,当我重新启动 Windows 10 时,这不是问题。时钟将显示正确的时间。然后,当我重新启动 Linux 时,时钟是正确的,但切换回 Windows 10 时,时钟又乱了。
答案1
操作系统将时间存储并检索到主板上的硬件时钟中,这样即使系统没有电源,它也可以跟踪时间。大多数操作系统(Linux/Unix/Mac)将时间存储在硬件时钟中,如下所示世界标准时间默认情况下,尽管有些系统(特别是 Microsoft Windows)将硬件时钟上的时间存储为'当地时间. 如果两个系统对硬件时钟的看法不同,则会导致双启动系统出现问题。
将硬件时钟设置为 UTC 的优点是,您在时区之间移动时或夏令时 (DST) 开始或结束时不需要更改硬件时钟,因为 UTC 没有 DST 或时区偏移。
将 Linux 更改为使用本地时间比将 Windows 更改为使用 UTC 更容易、更可靠,因此双启动 Linux/Windows 系统倾向于使用本地时间。
自 Intrepid (8.10) 起,UTC=yes 为默认值。
解决方案 1:让 Windows 使用 UTC
笔记:此方法最初不受 Windows Vista 和 Server 2008 支持,但在 Vista SP2、Windows 7、Server 2008 R2 和 Windows 8/8.1 中重新得到支持。
让 MS Windows 根据硬件时钟计算 UTC 时间。
创建名为WindowsTimeFixUTC.reg包含以下内容,然后双击它以将内容与注册表合并:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] "RealTimeIsUniversal"=dword:00000001
笔记:无论关机时上述注册表设置如何,Windows 时间服务仍会将本地时间写入 RTC,因此使用此命令禁用 Windows 时间服务非常方便(如果在 Windows 中仍需要时间同步,请使用任何第三方时间同步解决方案):
sc config w32time start= disabled
如果在 Powershell 中运行上述命令,则必须指定 sc.exe:
sc.exe config w32time start= disabled
扭转变化
您可以创建一个包含以下内容的文件,然后双击它以合并原始更改,如上所述:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] "RealTimeIsUniversal"=-
如果 Windows 时间服务已被禁用,请使用以下命令再次启用它:
sc config w32time start= demand
解决方案 2:让 Linux 使用“本地”时间
要告诉你的 Ubuntu 系统硬件时钟已设置为“本地”时间:
Ubuntu 15.04 之前的系统(例如 Ubuntu 14.04 LTS):
- 编辑 /etc/default/rcS
添加或更改以下部分
# Set UTC=yes if your hardware clock is set to UTC (GMT) UTC=no
Ubuntu 15.04系统及以上(例如Ubuntu 16.04 LTS):
打开终端并执行以下命令
timedatectl set-local-rtc 1
来源:Ubuntu 帮助