1. 原因分析 出現這種情況的原因是 Windows 和 Ubuntu它們在預設情況下看待硬體時間(主板上的BOIS顯示的時間)的方式 不一樣。 我們先來瞭解一下關於時間的概念 : UTC,即Universal Time Coordinated, 協調世界時 GMT,即Greenwich Mean ...
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時間的區別,大家可以藉助理解。
改變前
改變後