[MAC] 徹底解決 BootCamp 及 Mac OS 雙系統時間錯亂的問題

on  - 26,002 views

有使用「BootCamp」來跑 Mac 及 Windows 雙系統的人, 應該都遇過在兩個 OS 間切換所造成的時間錯亂問題吧!?

在之前網路上傳出的解決方法不外乎是透過: 1. 兩個作業系統中的「網路時間自動同步」功能 2. 透過修改 Windows 的登錄檔並關閉「網路時間自動同步」功能, 來解決時間不一致的問題。

然而前述第一個方法若遇到防火牆或 Proxy 就「挫屎」(公司企業常遇到), 得透過支援「HTP」的網路時間同步軟體才能正常校時, 萬一是在沒網路的環境下更是沒招; 後者則是遇到某些雞婆的軟體不理會「網路時間自動同步」功能關閉的設定強制校時, 或軟體的 Client 端會自動和 Server 端同步時間 (我遇到了), 同樣都會造成「挫屎」的局面。

到底有沒有什麼方法能不依靠作業系統的「網路時間自動同步」功能, 而又能徹底解決時間錯亂的問題呢!? 答案當然是:「有!」… 不然我寫這篇文章幹嘛!?

在說明解法之前, 我先說明為什麼會有這種兩個 OS 時間不一致的問題。

其實不管是 Mac OS 或是 Windows, 其系統中的時間都是靠電腦硬體上時間而來, 只是兩者對於硬體中的時間解讀並不相同。在 Mac OS 中是把自硬體上所讀取到的時間當成 GMT 時間來處理 (GMT + 0), 而 Windows 中則是直接把所讀取到的時間, 當成使用者所在地的時間來處理, 以台灣為例就是 GMT + 8。

這種處理差異在以前 Mac 還無法執行 Windows 時並不會造成問題, 但自從 Mac 也能跑 Windows 後, 兩個系統對硬體時間的不同解讀便造成了時間的錯亂 (除非你剛好待在格林威治天文台, 也就是 GMT + 0 的時區)。

舉個例: 假設台灣本地的時間是下午 3:00 , 而電腦硬體上的時間也是下午 3:00。在 Windows 上讀取到的時間就是 15:00 (下午 3:00), 但在 Mac 上讀取到的時間卻是 15:00 + 8 小時 (台灣是 GMT + 8) 也就是 23:00。這時便會發現 Mac 上的時間比實際快了 8 小時, 若此時你在 Mac 上將時間調成正確的下午 3:00 (即 15:00), 則硬體上的時間會被更動為 15:00 – 8 小時 (GMT + 0) 的時間, 也就是上午 7:00… 此時開機進 Windows 後, 讀到的時間會是上午 7:00 而不是期望中的下午 3:00… 看出兩者間的奇妙差異了嗎?

從上面我們可以得知: 若是在 Windows 開機時將時間設為 GMT + 8 的時間 (以台灣為例), 而 Windows 關機時則將時間設回 GMT + 0 的時間, 就可以徹底解決時間錯亂的問題。

作法如下:

首先編寫一個 Windows 開機時要執行的批次檔, 命名為「 startup.bat 」, 內容如下:

RunDLL32 shell32.dll,Control_RunDLL %SystemRoot%\system32\TIMEDATE.cpl,,/Z Taipei Standard Time

其中紅色字體的部份要改為你所在地的時區名稱 (上面是以台灣為例)。

若不知道時區名稱, 可以執行「 regedit 」並找到以下機碼:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones

展開「 TimeZones 」節點便可看到時區名稱列表, 找到你所在地的時區名稱, 換掉紅色字體部份即可。

接著再編寫一個名為「 shutdown.bat 」的批次檔, 內容如下:

RunDLL32 shell32.dll,Control_RunDLL %SystemRoot%\system32\TIMEDATE.cpl,,/Z Greenwich Standard Time

備妥這兩個檔後, 接下來就是要設法讓這兩個檔分別於開關機時自動執行, 我個人是透過 Windows 的「群組原則」來達成這個目的, 若你使用的 Windows XP 是 Home Edition 可能會無此功能 (不確定, 沒用過), 請自行尋找替代的軟體來做。

我以「群組原則」來說明…

首先, 於「開始」→「執行」對話框輸入「 gpedit.msc 」後按「確定」。

接著於出現的視窗找到下圖的節點 (我是設定在 Windows 登入、登出時執行, 若你想於開關機時執行 請找圖片上方「電腦設定」→「Windows 設定」→「指令碼 (啟動/關機)」), 雙擊右方的窗格中的「登入 (啟動)」(建議設定於啟動及關機時指行):

於出現的對話框按「新增」:

接著按下「瀏覽」, 然後找到剛剛編寫的「 startup.bat 」:

再以同樣的方式設定「登出 (關機)」的指令碼為「 shutdown.bat 」即可。

設定好後, 確定 Windows 上的時間是目前你所在地的正確時間並重開機, 然後在 Mac OS 及 Windows 間切換, 確定兩邊的時間是否都是你所在地的時間, 若都正確就完成了!

補充: 本文所教的方法只有在一種情況下會導致時間錯亂, 那就是「Windows 不正常關機」。遇到這種情形的時候, 只需重新進入 Windows 把時間設為你所在地的正確時間即可。除了這點外, 使用本文的方法不管是有無網路連線、網路自動校時開或關, 都不會造成切換 OS 時間錯亂的問題。

注意: 若你先前有利用那招廣為流傳卻又不能真正解決問題的改登錄檔方法, 在使用本方法前請先將該項登錄資訊刪除。

[tags]Mac, BootCamp, Boot Camp[/tags]

13 Comments Add yours

  1. rollr says:

    Cool, It is a really nice tip!

    thank you for your sharing!!

  2. 白色飛魚 says:

    不曉得文中所提改登錄檔的方式是不是指這個:
    1.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
    2.加入DWORD變數並命名為RealTimeIsUniversal,值設定為1
    3.改完之後重新開機,則Windows將硬體時間視為GMT+0,網路時間自動同步功能不必取消。

  3. goston says:

    [quote comment=”9670″]不曉得文中所提改登錄檔的方式是不是指這個:
    [/quote]

    是的…

  4. 白色飛魚 says:

    喔喔,上一則回應的字串被截斷了……
    HKEY_LOCAL_MACHINE\
    SYSTEM\CurrentControlSet\
    Control\TimeZoneInformation

  5. Alvin says:

    那个.BAT的档案内容拷贝进去就行了?

  6. goston says:

    @Alvin
    是的,只是 startup.bat 那行的最後面記得換成自己所在的時區

  7. simon says:

    sorry,我在vista下無法執行「開始」→「執行」對話框輸入「gpedit.msc」
    請問是否另有可行的方式?謝謝!

  8. goston says:

    @simon
    版本較低階的 Windows 並沒有群組原則的設定,因此你可能要試試其它方法…

  9. Apple says:

    那mac呢?

  10. goston says:

    @Apple
    Mac OS 無需進行調整

  11. kevin says:

    您好,使用了您的方法,剛開始似乎有效,不過開機一段時間後,時間又會自己跳掉,請問還有其他的方法可以試嗎?謝謝

Leave a Reply