
我的機器有兩個作業系統,一個 Linux 發行版(主要)和一個 Windows 7(很少使用)。
兩個 O/S 均設定為我的時區 (UTC+1)。
根據我在 BIOS 上設定時間的方式,Windows 顯示時間為目前時間之前 1 小時,Linux 則顯示為目前時間之後 1 小時。
為什麼會出現這種情況?
Windows 機器通常會在與 Internet 斷開連線的情況下啟動; Linux 則已連接,因此它會在一小段時間後更正日期,但重新啟動後,它再次配置錯誤。
編輯:發現它是重複的https://serverfault.com/questions/16107/why-does-ubuntu-9-04-reset-my-windows-clock
答案1
我可以想到這裡可能存在的幾個問題。
首先,您可能在一個作業系統中啟用了夏令時,而在另一個作業系統中沒有啟用,或者您的其中一個作業系統配置了錯誤的時區。
Linux 可能會假設您電腦的硬體時鐘設定為 UTC 而不是本機時鐘,而 Windows 可能會認為它設定為本機時鐘。如果您處於 UTC+1 或 UTC-1,您可能會看到該行為。 Linux 可能會載入硬體時鐘的值,將其調整為本機值,然後在關機時寫入硬體時鐘之前將其轉換回 UTC。
答案2
您的 Linux 發行版假設您的 BIOS 時脈使用 UTC,而您的 Windows 安裝則假設您的 BIOS 時間為本機時間。
以下是我如何在具有雙啟動功能的筆記型電腦上進行設定:我在 Linux 端進行更改,以使用本地時間而不是 UTC 作為系統時鐘。首先,執行命令以便在 linux 端正確設定時間,如下所示root
:
date -s "2 feb 2016 18:05:15"
hwclock --hctosys --localtime
應將 BIOS 日期/時間設定複製到您的電腦並將其設定為本地時間。hwclock --systohc --localtime
應將 BIOS 時間設定為本地時間而不是 UTC。我建議使用date
上面的命令設定時間,然後執行: hwclock --systohc --localtime 並且也執行: hwclock --hctosys --localtime 以確保 /etc/adjtime 檔案的最後一行顯示「LOCAL」而不是「UTC」或類似的東西。這些--hctosys --localtime
標誌一起可以以程式方式完成此任務。可能date
會單獨完成,但我沒有檢查過。
檢查系統時間在當地時間是否確實準確。不要擔心日期設定字串的格式,它非常靈活。作為其他有效表達方式的範例:
date -s "2 feb 2016 6:05:15 PM"
date -s "february 2, 2016 6:11:30 PM"
date -s "Tue Feb 2 18:11:30 EST 2016"
(我現在是東部標準時間,GMT -5)
如果仍然遇到問題,您可能需要重新選擇時區。在 Debian 或 Ubuntu 等衍生版本中,您可以sudo dpkg-reconfigure tzdata
在 ncurses 介面中變更時區。
如果沒有,請嘗試尋找相關的時區資訊檔案。在我的安裝中,這是/usr/share/zoneinfo/America/Indiana/Indianapolis
.
找到它後,將其複製到/etc/localtime
:
cp /usr/share/zoneinfo/America/Indiana/Indianapolis /etc/localtime
執行此操作後,我會確保時間仍然設定date
正確。如果不是,請再次執行前兩個命令 (date
和hwclock
)。
在linux中應該做到這一點,這樣無論你在linux中設定什麼時間,都可以與windows正確共享。或者,也可以這樣做,但將視窗設定為使用 UTC 會更困難。完成此操作的方式會隨版本的不同而變化,並且已知 Windows 會在更新後還原到本機時間。
我記得一台特別頑固的計算機,所有的hwclock
事情都被覆蓋了,因為計算機使用 NTP 通過互聯網獲取當前時間。時區設定是解決該問題而不完全停用 NTP 的唯一方法。
無論如何,這只是我過去在這件事上的所有經歷的一大堆。其中之一幾乎肯定會起作用。我會先嘗試時區的東西,然後hwclock --systohc --localtime
在完成後一定要嘗試這些東西,以確保 BIOS 時鐘是當地時間。