1. 程式人生 > >CST,CET,UTC,GMT,DST,Unix時間戳幾種常見時間概述與關係

CST,CET,UTC,GMT,DST,Unix時間戳幾種常見時間概述與關係

原文地址:http://blog.csdn.net/kongjiea/article/details/44061117

1、UTC: 

Universal Time Coordinated 協調世界時,又稱世界標準時間

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

2、GMT: 

Greenwich Mean Time 格林尼治平均時
UTC和GMT都與英國倫敦的本地時相同,所以程式中UTC與GMT沒什麼不同。意思UTC=GMT是相等的

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

3、Unix時間戳:

在計算機中看到的UTC時間都是從(1970年01月01日 0:00:00)開始計算秒數的。所看到的UTC時間那就是從1970年這個時間點起到具體時間共有多少秒。 這個秒數就是Unix時間戳。

4、CST時間:

CST卻同時可以代表如下 4 個不同的時區:

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

5、CET

(英語:Central European Time,CET)歐洲中部時間

是比世界標準時間(UTC)早一個小時的時區名稱之一。它被大部分歐洲國家和部分北非國家採用。冬季時間為UTC+1,夏季歐洲夏令時為UTC+2

6、DST:

Daylight Saving Time「夏日節約時間

是指在夏天太陽升起的比較早時,將時鐘撥快一小時,以提早日光的使用,在英國則稱為夏令時間(Summer Time)。這個構想於1784年由美國班傑明·富蘭克林提出來,1915年德國成為第一個正式實施夏令日光節約時間的國家,以削減燈光照明和耗電開支。自此以後,全球以歐洲和北美為主的約70個國家都引用這個做法。目前被劃分成兩個時區的印度也正在商討是否全國該統一實行夏令日光節約時間。歐洲手機上也有很多GSM系統的基地臺,除了會傳送當地時間外也包括夏令日光節約時間,做為手機的時間標準,使用者可以自行決定要開啟或關閉。值得注意的是,某些國家有實施「夏日節約時間」的制度,出國時別忘了跟隨當地習慣在表上調整一下,這可是機械錶沒有的功能設計哦!

7、關係:

UTC=GMT
CET=UTC/GMT + 1小時
CST=UTC/GMT +8 小時
CST=CET+7

=========================================================

今天在配合Java人員做時間處理時候遇到一個奇怪的問題,在伺服器端通過
java# 獲取當前時間為 Wed Mar 04 10:00:00 CST 2015, 意思就是2015年3月4日的10點整時間
轉化為
GMT時間為:04 Mar 2015 02:00:00 GMT,也就是說GMT時間加上 8 個小時等於CST表示的時間, 那這個CST不就是北京時間麼,因為我們是在東八區的。  
 
一切看起來很正常,不過在客戶端用JavaScript解析這個時間就有問題了:  

    // Thu Mar 05 2015 16:00:00 GMT+0800
    var d=new Date('Wed Mar 04 10:00:00 CST 2015').toGMTString();
    

好奇怪,這次GMT和CST表示的時間居然相差整整6個小時? 怎麼又整出6小時? 

可以直接參看第5點可明白理論上 cst=gmt+8

 前面提到的通過 Java 獲取的CST時間用的是China StandardTime,而客戶端JavaScript則預設採用的是美國的中部時間

Central Standard Time (USA) UT-6:00

所以這時js獲取的時間 cst-6=gmt 或者說 cst=gmt+6;

可見,在以後的程式設計中為了避免錯誤,還是不要使用CST時間,而儘量採用GMT時間。