本地時間與UTC(世界協調時間)的轉換

helloxchen發表於2010-11-01
本地時間與UTC(世界協調時間)的轉換
首先我們瞭解一下時間的相關概念,以及之間的區別,需要了解的時間概念有:
本地時間(locale time)
格林威治時間(Greenwich Mean Time GMT)
時間協調時間 (Universal Time Coordinated UTC)
本地時間,顯而易見不用解釋了
先看看時間的標準:
(1)世界時
世界時是最早的時間標準。在1884年,國際上將1s確定為全年內每日平均長度的1/8.64×104。以此標準形成的時間系統,稱為世界是,即 UT1。1972年國際上開始使用國際原子時標,從那以後,經過格林威治老天文臺本初子午線的時間便被稱為世界時,即UT2,或稱格林威治時間(GMT),是對地球轉速週期性差異進行校正後的世界時。
(2)原子時
1967年,人們利用銫原子振盪週期極為規律的特性,研製出了高精度的原子時鐘,將銫原子能級躍遷輻射9192631770周所經歷的時間定為 1s。現在用的時間就是1971年10月定義的國際原子時,是透過世界上大約200多臺原子鐘進行對比後,再由國際度量衡局時間所進行資料處理,得出的統一的原子時,簡稱TAI。
(3)世界協調時
世界協調時是以地球自轉為基礎的時間標準。由於地球自轉速度並不均勻,並非每天都是精確的86400原子s,因而導致了自轉時間與世界時之間存在 18個月有1s的誤差。為糾正這種誤差,國際地球自轉研究所根據地球自轉的實際情況對格林威治時間進行增減閏s的調整,與國際度量衡局時間所聯合向全世界釋出標準時間,這就是所謂的世界協調時(UTC:Coordinatde Universal Time)。UTC的表示方式為:年(y)、月(m)、日(d)、時(h)、分(min)、秒(s),均用數字表示。

GPS 系統中有兩種時間區分,一為UTC,另一為LT(地方時)兩者的區別為時區不同,UTC就是0時區的時間,地方時為本地時間,如北京為早上八點(東八區),UTC時間就為零點,時間比北京時晚八小時,以此計算即可
透過上面的瞭解,我們可以認為格林威治時間就是時間協調時間(GMT=UTC),格林威治時間和UTC時間均用秒數來計算的。

而在我們平時工作當中看到的計算機日誌裡面寫的時間大多數是用UTC時間來計算的,那麼我們該怎麼將UTC時間轉化為本地時間便於檢視日誌,那麼在作程式開發時又該怎麼將本地時間轉化為UTC時間呢?
下面就介紹一個簡單而使用的工具,就是使用linux/unix命令date來進行本地時間和local時間的轉化。
大家都知道,在計算機中看到的utc時間都是從(1970年01月01日 0:00:00)開始計算秒數的。所看到的UTC時間那就是從1970年這個時間點起到具體時間共有多少秒。

以我的FC9平臺為例:
1.使用date命令獲得本地時間
Mon Jan 5 21:06:48 CST 2009
2.將本地易理解的時間轉化為UTC時間,使用date 命令,對該時間進行UTC格式化
date +%s -d "Mon Jan 5 21:06:48 CST 2009"
返回的結果是:1231160808 #自1970年1月1日0:00:00起到今天晚上21:06:48共1231160808秒

1231160808這就是我們所說的UTC或者格林威治時間。

3.使用命令date將難以理解的UTC時間轉化成為容易理解的本地時間
在這裡,我們隨便將上面這個格林威治時間修改一下來進行轉化即可,比如
1231130828
date -d "1970-01-01 UTC 1231130828 sec"

返回結果是:Mon Jan 5 12:47:08 CST 2009 #是今天中午12:47:08

4.使用date命令將本地時間進行格式化
date +%X -d "Mon Jan 5 12:47:08 CST 2009"
返回結果:12:47:08 PM

date +%x +%X -d "Mon Jan 5 12:47:08 CST 2009"
返回結果是:01/05/2009 12:47:08 PM

date +'%x %X %W' -d "Mon Jan 5 12:47:08 CST 2009"
返回結果:01/05/2009 12:47:08 PM 01 #01是星期一,如果是%w,返回的是1

date +'%Y-%m-%d %H:%M:%S %W' -d "Mon Jan 5 12:47:08 CST 2009"
返回結果是:2009-01-05 12:47:08 01

對UTC時間的進行格式化:
date +‘%x %X' -d "1970-01-01 UTC 1231130828 sec"
返回結果:01/05/2009 12:47:08 PM

date命令還有很多格式化的引數,功能很強大,大家可以使用"man date"或者"info date"來作參考。

對於windows的朋友沒有linux環境,沒有辦法進行時間轉化,推舉一個網址可以作時間轉化:
http://blog.chinaunix.net/u3/93926/showart_1872733.html
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24790158/viewspace-1040719/,如需轉載,請註明出處,否則將追究法律責任。

相關文章