使用过 Linux 系统的同学应该都遇到过与 Windows 系统的系统时钟不同步的问题。如果 Linux 系统没有开启自动对时,你会发现 Linux 系统时钟总是比 Windows 快 8 小时。
原因是这样的,在关机后之所以时钟信息不会丢失,是因为时钟信息会保存在主板上,由主板上的电池供电。但这个时钟功能比较简单,只能保存年月日时分秒这些数值信息,不能保存时间标准、时区、夏令时这类复杂信息。时间表示有两个标准:
UTC:Coordinated Universal Time,协调世界时,是一种与时区无关的全球时间标准;
localtime:本地时间,依赖于当前时区。
因为对主板中保存的硬件时间理解不同,Linux 系统默认使用 UTC,从主板中读取硬件时钟(也称为实时时钟,Real Time Clock,简称 RTC)后,加上系统中存储的时区信息后成为系统时钟(System Clock)供系统内核和程序使用;而 Windows 系统默认使用的是 localtime,会直接使用从主板读取到的 RTC。
解决办法也简单,有两个思路:
让 Windows 使用 UTC(推荐);
让 Linux 使用 RTC。
§让 Windows 使用 UTC
虽然 Windows 默认使用 localtime,但 Windows 是可以处理 UTC 的,只不过需要修改注册表,使用管理员权限运行 CMD 或 Powershell,执行下面这条命令:
|
|
上面是 64 位系统的命令,如果是 32 位系统,把里面的 REG_QWORD
改成 REG_DWORD
就可以了,执行完毕后重启电脑生效。
如果你之前使用了夏令时和自动对时,也是可以照常使用的,不需要关闭。网上很多教程十分“贴心”地提醒修改后不可以开启时间同步,以免设置失效,俺亲测是不影响的,依然可以正常使用时间同步。
§让 Linux 使用 RTC
以下以俺使用的 Manjaro KDE x64 为例,其他发行版设置方法大同小异,自己摸索下就好。
首先检查当前时区是否正确:
|
|
如果显示的时区不是 Asian/Shanghai,那么执行这条命令切换时区:
|
|
然后执行:
|
|
现在 Linux 就会像 Windows 一样将 RTC 当作 localtime 来对待了,缺点是无法使用夏令时,以及小概率会在启动时遇到某些不可预料的错误(详情请参阅 这里)。
如果需要改回 UTC,将上一条命令结尾的 true
改为 false
就可以了。
参考链接: