ubuntu与windows双系统时间同步问题

原因

一个概念:BIOS时间:系统的硬件时间。

时间不同步,原因非常简单

windows认为,BIOS时间就是当地时间。所以windows会直接显示BIOS时间。

ubuntu认为,BIOS时间应当是UTC时间(格林尼治标准时间)。所以ubuntu会将BIOS时间加上8小时后再显示出来(在中国)。

所有的操作系统(不论是ubuntu还是windows)在启动后都会更新系统时间。流程如下:

1.电脑开机,读取BIOS时间并显示。(windows直接显示,ubuntu加8后再显示)

2.联网后,获取当地时间并显示。

3.更新BIOS时间。

联网后大家获取到的时间都是当地时间,这没问题。但ubuntu和windows在更新BIOS时间时,做法不同。windows获取到当地时间后,直接把BIOS时间设为当地时间;而ubuntu把BIOS时间设为UTC时间。比如现在是北京时间12点,UTC时间就是12-8=4点,ubuntu就会把BIOS时间设为4点。

案例

请您退出windows,进入ubuntu,在终端里输入一条指令,就可以验证上面的分析:

timedatectl status

这个指令用来查看系统时间状态。如果您的显示如下:

ricksteves@ricksteves-X405UA:~$ timedatectl status 
               Local time: 四 2023-01-12 16:50:35 CST
           Universal time: 四 2023-01-12 08:50:35 UTC
                 RTC time: 四 2023-01-12 08:50:36    
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes                       
              NTP service: active                    
          RTC in local TZ: no

第一行,Local time=12点,是ubuntu联网获取到的当地时间。

第三行,RTC time=4点,是电脑的BIOS时间。可以看到,ubuntu把当地时间减去8小时,得到了UTC时间并赋给了BIOS。

最后一行,RTC in local TZ=no,这句话代表系统时间和BIOS时间不同步,即BIOS存储的是UTC时间,而系统时间是当地时间。

那么问题就来了,下次重启进入windows时,windows读到的BIOS时间是4点,而windows认为BIOS时间就是当地时间,所以就会直接显示4点。不过,windows也会联网,等他得到正确的12点后,他又会将BIOS设为12点,那么等你下次进ubuntu的时候,ubuntu又会把12点加上8,得到20点,再输出——如此循环,每次更换系统的时候显示的时间都不对。

解决方案

解决方案非常简单。直接在ubuntu终端中输入:

timedatectl set-local-rtc 1

这句话的作用是让ubuntu将系统时间和BIOS时间同步。现在,ubuntu和windows一样,都认为BIOS时间就是当地时间,联网更新时,也是直接将BIOS时间设为当地时间。这样就没问题了。

现在再输入timedatectl status查看系统时间状态:

root@ricksteves-X405UA:/home/ricksteves# timedatectl status
               Local time: 四 2023-01-12 16:54:27 CST
           Universal time: 四 2023-01-12 08:54:27 UTC
                 RTC time: 四 2023-01-12 16:54:27    
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes                       
              NTP service: active                    
          RTC in local TZ: yes

第一行,Local time=12点。

第三行,RTC time=12点,即BIOS也被设为了12点。

最后一行,RTC in local TZ变为了yes。系统时间和BIOS时间完成同步。

弹出一个Warning,告诉你这种方法不太好,但我们为了同步两个系统的时间,也只能这么做了。

现在再重启进入windows,看到时间已经对了。

发表评论