原因
Windows双系统时间不统一在于时间表示有两个标准:localtime 和 UTC(Coordinated Universal Time) 。UTC 是与时区无关的全球时间标准。尽管概念上有差别,UTC 和 GMT (格林威治时间) 是一样的。localtime 标准则依赖于当前时区。
时间标准由操作系统设定,Windows 默认使用 localtime,Mac OS 默认使用 UTC 而 UNIX 系列的操作系统两者都有。使用 Linux 时,最好将硬件时钟设置为 UTC 标准,并在所有操作系统中使用。这样 Linux 系统就可以自动调整夏令时设置,而如果使用 localtime 标准那么系统时间不会根据夏令时自动调整。
方法
通过如下命令可以检查当前设置,systemd 默认硬件时钟为协调世界时(UTC)
$ timedatectl status | grep local
硬件时间可以用 hwclock 命令设置,将硬件时间设置为 localtime(解决双系统时间问题):
# timedatectl set-local-rtc true
硬件时间设置成 UTC(恢复默认设置):
# timedatectl set-local-rtc false
上述命令会自动生成/etc/adjtime,无需单独设置。
Note: 如果不存在 /etc/adjtime,systemd 会假定硬件时间按 UTC 设置。