天天看點

utc 時間 hwclock

1. “系統時間”與“硬體時間”

   系統時間: 一般說來就是我們執行 date指令看到的時間,linux系統下所有的時間調用(除了直接通路硬體時間的指令)都是使用的這個時間。

    硬體時間:主機闆上BIOS中的時間,由主機闆電池供電來維持運作,系統開機時要讀取這個時間,并根據它來設定系統時間(注意:系統啟動時根據硬體時間設定系統時間的過程可能存在時區換算,這要視具體的系統及相關設定而定)。

2. “UTC時間”與“本地時間”

    UTC時間:CoordinatedUniversal 8 e2 i( H7 t0 ^/^Time 世界協調時間(又稱世界标準時間、世界統一時間),在一般精度要求下,它與GMT(Greenwich MeanTime,格林威治标準時間)是一樣的,其實也就是說 GMT≈UTC,但 UTC 是以原子鐘校準的,更精确。

    本地時間:由于處在不同的時區,本地時間一般與UTC是不同的,換算方法就是

本地時間 = UTC +時區  或   UTC = 本地時間 - 時區

   時區東為正,西為負,例如在中國,本地時間都使用中原標準時間,在linux上顯示就是 CST(China StandardTime,中國标準時,注意美國的中部标準時Central StandardTime也縮寫為CST,與這裡的CST不是一回事!),時區為東八區,也就是 +8 區,是以 CST=UTC+(+8小時) 或 UTC=CST-(+8小時)。

1. 系統時間 date

   直接調用date,得到的是本地時間。如果想得到UTC時間的話,使用 date -u。

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

2009年 12月 07日 星期一 14:22:20CST

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

2009年 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

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

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

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

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

2009年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                2009年 12月 07日 星期一 19:26:29 CST

date-u             2009年 12月 07日 星期一 11:26:29 UTC

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

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

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

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