天天看點

【轉載】關于時間、時區、系統時間和硬體時間

(文章為轉載,針對部分表達不明确或錯誤的地方進行了修正) 

【轉載】關于時間、時區、系統時間和硬體時間

時區(time zone)是用于劃分地球上、使用同一時間定義的區域而産生的概念。

1884年在華盛頓召開國際經度會議時,為了克服時間上的混亂,規定将全球劃分為24個時區。

格林威治标準時間 gmt

十七世紀,格林威治皇家天文台為了海上霸權的擴張計劃,而進行天體觀測。1675年舊皇家觀測所(old royal observatory) 正式成立,到了1884年決定以通過格林威治的子午線作為劃分地球東西兩半球的經度零度。觀測所門口牆上有一個标志24小時的時鐘,顯示當下的時間,對全球而言,這裡所設定的時間是世界時間參考點,全球都以格林威治的時間作為标準來設定時間,這就是我們耳熟能詳的「格林威治标準時間」(greenwich mean time,簡稱g.m.t.)的由來,标示在手表上,則代表此表具有兩地時間功能,也就是同時可以顯示原居地和另一個國度的時間。

世界協調時間 utc

多數的兩地時間表都以gmt來表示,但也有些兩地時間表上看不到gmt字樣,出現的反而是utc這3個英文字母,究竟何謂utc?事實上,utc指的是 coordinated universal time- 世界協調時間(又稱世界标準時間、世界統一時間),是經過平均太陽時(以格林威治時間gmt為準)、地軸運動修正後的新時标以及以「秒」為機關的國際原子時所綜合精算而成的時間,計算過程相當嚴謹精密,是以若以「世界标準時間」的角度來說,utc比gmt來得更加精準。其誤內插補點必須保持在0.9秒以内,若大于0.9秒則由位于巴黎的國際地球自轉事務中央局釋出閏秒,使utc與地球自轉周期一緻。是以基本上utc的本質強調的是比gmt更為精确的世界時間标準,不過對于現行表款來說,gmt與utc的功能與精确度是沒有差别的。

夏日節約時間dst

所謂「夏日節約時間」daylight saving time(簡稱d.s.t.),是指在夏天太陽升起的比較早時,将時鐘撥快一小時,以提早日光的使用,在英國則稱為夏令時間(summer time)。這個構想于1784年由美國班傑明·富蘭克林提出來,1915年德國成為第一個正式實施夏令日光節約時間的國家,以削減燈光照明和耗電開支。 自此以後,全球以歐洲和北美為主的約70個國家都引用這個做法。

系統時間

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

硬體時間

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

世界時間

(universal time)世界标準時間即utc。

地方時間

(本地時間,local time)由于處在不同的時區,本地時間一般與utc是不同的,換算方法就是:

本地時間 = utc + 時區 或 utc = 本地時間 – 時區

<a href="http://my.oschina.net/moooofly/blog/357042#">?</a>

1

2

3

4

5

6

<code># date</code>

<code>frinov723:21:34 cst 2014  </code><code>//</code><code>本地時間</code>

<code># date -r</code>

<code>fri,07nov201423:21:35+0800</code><code>//</code><code>本地時間,rfc2822格式</code>

<code># date -u</code>

<code>frinov715:21:37 utc 2014  </code><code>//utc</code><code>時間</code>

cst是什麼意思?

其實cst有四種意思,是以這裡顯示cst是很容易被誤解。

central standard time (usa) ut-6:00

central standard time (australia) ut+9:30

china standard time ut+8:00

cuba standard time ut-4:00

是以檢視linux系統時間,我還是建議使用後兩種方式。

如何去掉hwclock中顯示的cst?

執行hwclock指令之前,添加環境變量”export lang=c”

<code># hwclock</code>

<code>sun09nov201407:38:25 pm cst -0.161066 seconds</code>

<code># export lang=c</code>

<code>sunnov919:38:352014-0.813925 seconds</code>

使用指令可以檢視bios硬體時間:

<code># hwclock --localtime</code>

但因為bios裡面沒有時區的設定,是以有兩種時間設定方法。

utc=yes 存儲utc時間

utc=no  存儲本地local時間

檢視系統是否啟用了utc方法如下:

utc=false or utc=true        in file /etc/sysconfig/clock,rhel5

local or utc                       in file /etc/adjtime,last line,rhel6

utc=no or utc=yes             in file /etc/default/rcs,debian6,squeeze.

local or utc                       in file /etc/adjtime,last line,debian7,wheezy.(ifnot exist,excute hwclock --adjust)

若系統啟用了utc,則顯示如下:

7

8

9

10

11

12

<code># tail -1 /etc/adjtime</code>

<code>utc</code>

<code>sun,09nov201419:36:05+0800</code>

<code>sunnov919:36:062014-0.031592 seconds</code>

<code>sunnov911:36:072014-0.672380 seconds</code><code>//bios</code><code>裡面存的是utc時間</code>

若未啟用utc,則顯示如下: 

<code>local</code>

<code>#date -r</code>

<code>sun,09nov201419:32:12+0800</code>

<code>#hwclock</code>

<code>sunnov919:32:132014-0.725862 seconds</code>

<code>#hwclock --localtime</code>

<code>sunnov919:32:142014-0.995411 seconds</code><code>//bios</code><code>裡面存的是local本地時間</code>

      有很多人安裝了雙系統linux+windows會發現其中一個系統時間不準。這是因為windows預設不使用utc,需要将linux中的utc關閉。當然網上有人修改windows的系統資料庫将utc打開,也是一樣的,但我沒試過。

可能存在如下情況

原系統設定是 “utc=yes”,重裝了系統之後采用了”utc=no”或者相反的操作。

将作業系統設定“utc=yes”的磁盤,插入原先作業系統”utc=no”的伺服器并采用新插入盤啟動。

這些情況都可能會導緻時間不一緻。

解決辦法是用ntpdate同步網絡時間,并寫入硬體bios。

比較混亂的情況下還要指定把哪個時間寫入bios(尚未測試)

<code># hwclock --systohc --localtime //将local時間寫入bios。适用于utc=no</code>

<code># hwclock --systohc --utc       //将utc時間寫入bios,适用于utc=yes</code>

<a href="http://www.sealinger.com/archives/221/">http://www.sealinger.com/archives/221/</a>

<a href="http://hi.baidu.com/lujunqianglw/blog/item/bc2d9144d24fc48fb3b7dc1d.html">http://hi.baidu.com/lujunqianglw/blog/item/bc2d9144d24fc48fb3b7dc1d.html</a>

<a href="http://www.huawei.com.cn/ecommunity/bbs/10143547.html">http://www.huawei.com.cn/ecommunity/bbs/10143547.html</a>

繼續閱讀