9.22.2012

linux 硬體時間hwclock 也有時區!

今天在處理ntp功能才發現
因為在我把/etc/localtime改為+8的台灣時間後
使用ntpdate把時間調整過後,並 hwclock -w寫入RTC中
再重新開機,結果時間就錯了!!
hwclock 是正確的+8時間
但date得到的時間就是這個時間再+8,整個大錯亂
詳細了解後才知道,原來除了date有時區設定檔/etc/localtime以外
hwclock也有時區設定檔 /etc/TZ
cat /etc/TZ 得到 「MST7MDT」
上網查得知這是-7的時區-->我會得到差8,也許是日光節約吧…(maybe)
所以就把它改為「TAIST-8TAIDT」  --> 網路上查來的,+8台灣時區

!!but!!重開後沒有用!!

所以囉,再找
找到這一篇
http://wiki.debian.org.hk/w/Set_date_and_time
上面說明使用
hwclock --systohc --utc        # 將UTC時間存入RTC
hwclock --systohc --localtime  # 將LOCAL時間存入RTC
hwclock --systohc
沒有指定LOCAL or UTC,hwclock 根據配置來確定RTC裡面存LOCAL orUTC
找 配置文件的優先級順序為:
    $ADJTIME_PATH、/var/state/adjtime、/var/lib/hwclock/adjtime、/etc/adjtime
配 置文件內有寫LOCAL 或 RTC
沒有配置文件的話,hwclock認為RTC裡面存的是LOCAL

加上--utc,指定要用utc設定時間硬體時間
這樣重開機date得到的時間就正常了
而hwclock的時間則變成了utc的時間
但…產生另一個問題,不過也不是很重要吧!!
hwclock -l  記了utc時間  -->正常應該是localtime
hwclock -u 記了localtime時間 --> 正常應該是 utc!!

我強烈的感覺,是不是hwclock在build的時候就指定了它的時區了?
不然怎麼會設定都沒用!!

ps:後來看到網路上,一位高手的解釋,才恍然大悟
hwclock --local/--utc 的意義是:假設BIOS時鐘的時間是當地/UTC時間,將它讀出來,再按當時時間顯示出來。

所以
hwclock 若是11:30:00  (預設為local)
hwclock --utc 為19:30:00   -->因為把RTC(BIOS)視為UTC時間,再轉為當地時間就是19:30:00了
hwclock --local   --> 把RTC視為Local時間,所以讀出來後不再轉換

  

沒有留言: