问题描述:
在装好Linux/Windows双系统后, 出现的问题: 假如现在你在linux(Ubuntu)里面,时间是16:00, 你重启系统,引导到windows, 你会发现,windows的时钟显示,你的时间是8:00,如果你到时间设置里点击NTP同步,时间恢复到16:00, 但是,下一次再从linux切换到windows,问题再次发生。
推荐解决方法:
推荐解决方法:Windows管理员执行如下命令,将硬件时钟设置为UTC时间:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
恢复为本地时间:
reg delete "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /f
导致时差的原因
- 在Windows下,系统时间=BIOS时间。Linux/macOS系统下,系统时间=UTC+8,BIOS存储UTC时间。
一旦启动Linux/macOS,开机时会自动与网络同步时间,BIOS时间就是当前的8小时前。随后重启后进入Windows系统,系统不会联网更新时间,并直接把BIOS中的UTC时间当做当前时间。Windows也就慢了8个小时。
解决思路
- 将Windows与Linux/macOS配置为相同的时间标准就行了。
方案一:Linux 系统将硬件时钟设置为本地时间
Linux运行:
sudo timedatectl set-local-rtc 1
方案二:Windows将硬件时钟设置为UTC时间
方法一:使用命令行(管理员权限)
-
打开命令提示符(Command Prompt)以管理员身份运行。
-
运行以下命令来将系统时钟设置为 UTC:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
- `reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation":这部分命令指定了注册表中的路径。
- /v: RealTimeIsUniversal:这是要修改或创建的注册表值的名称。
- /d: 1:这是将 RealTimeIsUniversal 值数据设置为 1,表示启用 UTC。
- /t: REG_DWORD:指定了该值的数据类型为 REG_DWORD(一个 32 位的整数)。
- /f: 强制执行命令,即使存在同名的注册表值也会覆盖。
- 重新启动计算机使更改生效。
方法二:使用注册表编辑器(Registry Editor):
- 打开注册表编辑器:按下 Win + R 键,键入 regedit,然后按 Enter 键。
- 转到以下注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
- 在右侧窗格中,右键单击空白处,选择 New -> DWORD (32-bit) Value,创建一个名为 RealTimeIsUniversal 的新值。
- 双击 RealTimeIsUniversal 值,并将数值数据设置为 1。
- 重新启动计算机使更改生效。
可能出现的问题
将Linux时间改为本地时间
- 双重启动系统的时间混乱:
- 如果你在双重启动的环境中运行 Windows 和 Linux,Windows 默认将硬件时钟视为本地时间,而 Linux 默认将其视为 UTC。如果两个系统对硬件时钟的解释不同,它们会不断地互相覆盖硬件时钟值,导致系统时间在两个操作系统之间切换时发生混乱。
- 时间同步服务问题:
- 时间同步服务(如 NTP 或 chrony)通常假设系统时间是 UTC。将时间设置为本地时间可能会导致时间同步不正确,影响系统的时间精度和一致性。
- 日志和时间戳问题:
- 系统日志和文件时间戳通常以 UTC 为基础。如果使用本地时间,日志记录和时间戳可能会出现混乱,尤其是在跨时区操作时。例如,系统维护和故障排除时,跨多个时区的时间戳可能会难以协调。
- 日光节约时间(DST)问题:
- 在使用本地时间时,处理日光节约时间(DST)转换可能会更加复杂。系统需要正确处理 DST 规则的变化,而这在使用 UTC 时是自动避免的。
- 容器和虚拟化环境:
- 在容器和虚拟化环境中,主机和虚拟机(或容器)通常使用 UTC 以确保一致性。如果虚拟机或容器使用本地时间,可能会导致时间同步问题。
Windows改为UTC时间
将 Windows 改为使用 UTC(而不是本地时间)作为系统时间,通常不会对大多数日常使用产生显著影响,但在某些情况下可能会遇到一些小问题或需要特别注意。
- 双重启动环境的时间同步:
- 在双重启动 Windows 和 Linux 的环境中,这样的配置可以避免时间冲突,因为 Linux 默认使用 UTC。如果两个系统都使用 UTC,系统时间将保持一致,不会出现时间跳变问题。
- 某些 Windows 应用程序:
- 一些较旧的或特定的 Windows 应用程序可能假设硬件时钟是本地时间。如果这些程序未能正确处理 UTC,可能会出现时间相关的问题,如计划任务的执行时间错误。
- BIOS 时间显示:
- BIOS(或 UEFI)设置界面通常会显示硬件时钟的时间。如果设置为 UTC,BIOS 中显示的时间将与本地时间不同。这可能会导致一些困惑,但不会影响系统功能。
- 与其他设备的时间同步:
- 如果你的 Windows 电脑与其他设备(如某些路由器或物联网设备)进行时间同步,而这些设备假设硬件时钟是本地时间,可能会出现时间同步问题。大多数现代网络时间协议(NTP)服务器都使用 UTC,因此这通常不是问题。
一些常见的全球时间标准(附录)
- UTC(协调世界时) :
- UTC 是国际上通用的标准时间,基于原子钟的时间测量。
- UTC 考虑了闰秒的调整,以确保与地球自转的匹配。
- 许多国家和组织使用 UTC 作为其标准时间。
- GMT(格林尼治标准时间) :
- GMT 是最初用于标准时间的术语,基于英国伦敦格林尼治天文台的本地时间。
- GMT 没有夏令时调整,保持固定。
- 在一些上下文中,GMT 可能被用作与 UTC 同义词,尽管严格来说它们有些微差异。
- 时区:
- 世界被划分为多个时区,每个时区都有自己的标准时间。
- 时区通常以 UTC 偏移量来表示,例如 UTC+0 表示格林尼治标准时间,UTC+1 表示比格林尼治时间快一小时。
- 中国: UTC+8