一、首先要弄清幾個概念:
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一樣,都是完全的多工作業系統。它們支援同樣的使用者介面 網路和安全性。...