linux時間與Windows時間不一致的解決

2022-01-14 06:51:20 字數 2853 閱讀 8954

一、首先要弄清幾個概念:

1. 「系統時間」與「硬體時間」

[12-01 19:07> ~]$date

2023年 12月 07日 星期一 14:22:20cst

[12-0119:07> ~]$ date -u

2023年 12月 07日 星期一 06:22:22utc

2. 硬體時間 /sbin/hwclock

直接呼叫 /sbin/hwclock 顯示的時間就是bios 中的時間嗎?未必!這要看 /etc/sysconfig/clock中是否啟用了utc,如果啟用了utc(utc=true),顯示的其實是經過時區換算的時間而不是bios中 真正的時間,如果加上--localtime 選項,則得到的總是 bios 中實際的時間.

[12-01 19:07> ~]#hwclock

2023年12月07日 星期一14時28分43秒 -0.611463 seconds

[12-0119:07> ~]# hwclock --utc

2023年12月07日 星期一14時28分46秒 -0.594189 seconds

[12-0119:07> ~]# hwclock --localtime

2023年12月07日 星期一06時28分50秒 -0.063875 seconds

3. /etc/localtime

這個檔案用來設定系統的時區,將/usr/share/zoneinfo/ 中相應檔案拷貝到/etc下並重命名為 localtime 即可修改時區設定,而且這種修改對date 命令是及時生效的。不論是 date 還是 hwclock都會用到這個檔案,會根據這個檔案的時區設定來進行utc和本地之間之間的換算。

4. /etc/sysconfig/clock

這個檔案只對 hwclock有效,而且似乎是只在系統啟動和關閉的時候才有用,比如修改了其中的 utc=true 到 utc=false 的前後,執行hwclock (--utc, 或 --localtime) 都沒有變化,要重啟系統後才生效。注:如果設定 utc=false並重啟系統後,執行一些命令結果如下:

date                2023年 12月 07日 星期一 19:26:29 cst

date-u             2023年 12月 07日 星期一 11:26:29 utc

hwclock             2023年12月07日 星期一 19時26分30秒 -0.442668seconds

hwclock--utc       2023年12月08日 星期二 03時26分31秒 -0.999091seconds

hwclock--localtime 2023年12月07日 星期一19時26分32秒 -0.999217 seconds

可見,如果不使用utc,bios時間(紅色部分)就是系統本地時間,而且注意這時執行 hwclock --utc得到的結果沒有任何意義,因為這裡我們已經禁用了utc,而且也明顯不符合「本地時間=utc+時區」的關係。

三、linux與windows雙系統間的時間同步

系統啟動和關閉時,硬體時間與系統時間之間的同步有兩種方式(假設在中國,用cst代表本地時間):

方式a: 使用utc(對linux就是 /etc/sysconfig/clock 中 utc=true)

開機: bios--------->utc(將bios中的時間看成是utc)------(時區變化)----->cst

關機:cst-------(時區變化)----->utc-------儲存到------>bios

方式b: 不使用utc(對linux就是 /etc/sysconfig/clock 中utc=false)

開機: bios----------------------->cst(將bios中的時間看成是cst)

關機:cst---------儲存到------>bios

通過設定/etc/sysconfig/clock,linux可以支援這兩種方式,然而windows只支援方式b(至少是預設支援b,而我不知道怎麼 能讓它支援a),那麼在雙系統情況下,如果linux設成a方式,那麼在linux與windows系統切換時一定會造成時間混亂的,解決辦法就是將 linux中的utc禁用,也設成b方式就可以了。

注:可以通過 hwclock --hctosys來利用硬體時間來設定系統時間(注意不是簡單的複製bios中的時間為系統時間,要看是否使用utc,如果使用的話則要做時區換算), 通過hwclock --systohc 來根據系統時間設定硬體時間(也要看是否啟用utc來決定是否做時區換算)。總之,不論使用--systohc 還是 --hctosys,同步後直接執行不帶引數的 hwclock 得到的時間與直接執行 date得到的時間應該一致,這個時間是否就是bios中的時間(hwclock--localtime)那就不一定了,如果啟用了utc就不是,沒啟用 utc就是。

而且好要注意:在系統中手動使用 hwclock hwclock --set --date='yyyy-mm-dd'來設定bios時間只在系統執行時有效,因為當系統關閉時,還會按設定好的方式根據系統時間來重設bios時間的,於是手動的設定便被覆蓋掉了。

解決辦法:

讓 windows 把硬體時間當作 utc

開始->執行->cmd,開啟命令列程式(vista則要以管理員方式開啟命令列程式方可有許可權訪問登錄檔),在命令列中輸入下面命令並回車

reg add hklm\system\currentcontrolset\control\timezoneinformation /v realtimeisuniversal /t reg_dword /d 1

修改 /etc/conf.d/hwclock 

將其中clock="utc"改為clock="local"。 

sabayon使用gedit修改時提示出錯,解決辦法是 equo install vim,然後用vim來修改即可。

Linux與Windows中的UTC時間

硬體時鐘是記錄在bios中的時間。對於windows系統,缺省會將bios中的硬體時鐘當作localtime,系統在關機時,windows會將時間同步到硬體時間中去,因此bios時鐘和系統時鐘都成為localtime.對於linux系統,如red hat系統,在安裝時會有乙個選項system clo...

Windows和Linux雙系統時間不對的問題。

解決windows與ubuntu雙系統時間同步問題 2016年07月11日 21 05 30 閱讀數 33115 1 問題發現 本子上裝的是window 10 win7公升級 和ubuntu gnome 14.04的雙系統,一直以來都發現雙系統切換後系統的時間顯示有問題 每次都發現進入ubuntu系...

Linux與Windows的比較

linux的操作對照複雜,windows的對照簡單.linux速度對照快,安然性比windows好 然則有很多軟體只能在windows裡執行與linux相容的軟體正在斥地中.linux合用在收集方面.1 linux和windows一樣,都是完全的多工作業系統。它們支援同樣的使用者介面 網路和安全性。...