1. 原因分析
出現這種情況的原因是 Windows 和 Ubuntu它們在默認情況下看待硬件時間(主板上的BOIS顯示的時間)的方式 不一樣。
我們先來了解一下關於時間的概念 :
-
UTC,即Universal Time Coordinated, 協調世界時
-
GMT,即Greenwich Mean Time, 格林尼治平時
-
RTC時間,即Real-time clock,是電腦的硬件時間
Windows 與 Linux 缺省看待系統硬件時間的方式是不一樣的:
- Linux 時鍾分為系統時鍾(System Clock)和硬件(RTC)時鍾。Linux把硬件時間當作 UTC,系統時間是UTC時間經過換算得來的。比如說北京時間是GMT+8,則系統中顯示時間是硬件時間+8。
- Windows把系統硬件(RTC)時間當作本地時間(local time),即系統時間跟BIOS中顯示的時間(RTC)是一樣的。
2. 解決方法
2.1 方法1(親測有效)
在Ubuntu系統中,命令行輸入
sudo apt-get install ntpdate //在Ubuntu下更新本地時間
sudo ntpdate time.windows.com
sudo hwclock --localtime --systohc //將本地時間更新到硬件上
然后重啟進入Windows,初次重啟可能時間依然不同,但是在Windows調整一遍后,再隨意切換時間就同步了。
2.2 方法2(對於低版本的Ubuntu系統可能有效)
1,2任選其一即可
1,讓Ubuntu不使用UTC時間, 而使用BIOS時間
將 /etc/default/rcS 中的 UTC=yes 改為 no // 高版本(16.04之后)的Ubuntu系統可能在default文件夾下找不到rcS文件,見方法3
2.讓Windows使用UTC時間,而不使用BIOS時間
開始->運行->CMD,打開命令行程序(Vista則要以管理員方式打開命令行程序方可有權限訪問注冊表),
在命令行中輸入下面命令並回車:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
2.3 方法3(方法二的一個補充,親測亦有效)
如果在方法2的1中沒有rcs文件,可以采用一下方式解決:
終端輸入:
timedatectl set-local-rtc 1 --adjust-system-clock
然后重啟。
對命令的一點解釋:
--adjust-system-clock
當使用set-local-rtc命令時,若使用了此選項,則表示根據RTC時間來更新系統時鍾,而不是用UTC來更新(UTC需要+8)。
若未使用此選項,則表示根據系統時鍾來更新RTC時間。
3. 補充及總結
為了更好的理解兩個系統對待時間的不同,作以下補充即總結:
- Windows將硬件時間(RTC)作為系統顯示的時間。
- Linux將硬件時間(RTC)作為UTC, 然后將UTC+8作為系統時間。這就導致了二者之間的不同, 時間會差8小時。
我們的解決方案是,要么讓Windows屈就於Linux,要么讓Linux屈就於Windows。我的建議是后者,因為畢竟Windows是主系統。
提供的三種方法本質上都是相同的,都是讓Linux直接以RTC作為系統顯示時間,而不需要UTC+8。
以下兩幅圖片,分別是改變前后,Linux時間的區別,大家可以借助理解。

改變前

改變后