時區,GMT時間,UTC時間,UNIX時間戳


秒是一個時間基本單位。一天24小時,一小時60分,一分鍾60秒,這來自於秒的定義——1秒的時間間隔為平均太陽日[1]的1⁄86400。到了20世紀中葉,人們發現地球自轉的時間並不是恆定的,於是在1956年改以地球繞太陽軌道公轉一周的時間來定義秒[2]。1967年,改用原子共振頻率來定義秒[3],並在此基礎上制作出了原子鍾。目前,原子鍾是世界上已知最准確的時間測量和頻率標准。

GMT時間

格林尼治平時(Greenwich Mean Time,GMT),又稱為格林尼治標准時間。
格林尼治平時的正午是指當平太陽橫穿格林尼治子午線時(也就是在格林尼治上空最高點時)的時間。自1924年2月5日開始,格林尼治天文台負責每隔一小時向全世界發放調時信息。由於地球每天的自轉是有些不規則的,而且正在緩慢減速,因此格林尼治平時基於天文觀測本身的缺陷,已經被原子鍾報時的協調世界時(UTC)所取代。

在http協議中規定,所有時間都要轉換為GMT時間[4],例如date: Sat, 19 May 2018 17:17:24 GMT

UT時間

世界時(Universal Time,UT),是一種以格林尼治子夜起算的平太陽時。
由於1925年以前人們在天文觀測中,常常把每天的起始(0時)定為正午,而不是通常民用的午夜,給格林尼治平時的意義造成含糊,人們使用世界時一詞來明確表示每天從午夜開始的格林尼治平時。

時區

時區是指地球上的某一個區域使用同一個時間定義。GMT時間或者UT時間,都是表示地球自轉速率的一種形式。從太陽升起到太陽落下,時刻從0到24變化。這樣,不同經度的地方時間自然會不相同。為了解決這個問題,人們把地球按經度划分為不同的區域,每個區域內使用同一個時間定義,相鄰的區域時間差為1個小時。時區又分為理論時區和法定時區。

理論時區

按經度,每15°為一個時區,將地球划分為24個時區,以本初子午線為中心,向東西兩側各延伸7.5°的區域為0時區。

法定時區

法定時區是在理論時區的基礎上,根據某些地區的國界線做了調整之后的時區。為實際使用的時區。例如中國橫跨東五區到東九區五個時區,但統一使用東八區時間(北京時間)。

時差

某個地方的時刻與0時區的時刻差稱為時差,時差東正西負。以本初子午線為中心,每向東一跨過一個時區,時刻增加一個小時,每向西跨過一個時區,時刻減少一個小時。

如何理解向東時區增加
由於地球是自西向東轉,在地球的某一個地方觀察,東邊的時間比西邊的時間早(東邊的人們先看到太陽升起)。
想象一下某一個時刻,太陽在你的正上空,此時你所在的地點的時間為正午12點。這時住在你東邊的人們,他們看到太陽已經在西邊了,他們的時刻是下午,所以往東,時刻增加。

國際日期變更線

大體以180度經線為日界線。當自西向東穿過日期變更線時,日期需要減少一天,反之,日期增加一天。

UTC時間

協調世界時(Coordinated Universal Time)。是主要的世界時間標准,以原子鍾所定義的秒長為基礎,在時刻上盡量接近GMT時間。UTC時間認為一個太陽日總是86400秒。在大多數情況下,UTC時間能與GMT時間互換。

UTC與時區

本初子午線所在的時區的時間后面加上字符Z,表示UTC時間。Z即為0時區的標志,讀做Zulu。例如09:30 UTC就寫作0930Z14:45:15 UTC則為14:45:15Z144515Z

UTC偏移量

UTC偏移量用以下形式表示: ±[hh]:[mm]±[hh][mm]、或者±[hh]。例如UTC時間為09:30z,此時北京時間就是1730 +0800,紐約時間是0430 -0500
UTC時間表示的格式一般為Sat, 20 May 2018 12:45:57 +0800表示東八區(北京時間)2018年5月20號 12:45:57星期六。

UTC時間與本地時間的轉換。

UTC時間 + 時差 = 本地時間

例如:

  1. UTC時間2018-05-20 09:30:00 UTC,UTC+0800(北京)2018-05-20 17:30:00 +8000,UTC-0500(紐約)2018-05-20 04:30:00 -0500
  2. UTC時間2018-05-20 01:30:00 UTC,UTC+0530(印度)2018-05-20 07:00:00 +0530,UTC-1000(夏威夷)2018-05-19 15:30:00 -1000

閏秒

閏秒是在協調世界時(UTC)中增加或減少一秒,使得UTC時與原子時[5]之間的差不超過0.9秒。
需要閏秒的部分原因是因為一個太陽日並不總是86400秒。當要增加正閏秒時,這一秒是增加在第二天的00:00:00之前,效果是延緩UTC第二天的開始。當天23:59:59的下一秒被記為23:59:60,然后才是第二天的00:00:00。如果是負閏秒的話,23:59:58的下一秒就是第二天的00:00:00了,但目前還沒有負閏秒調整的需求。
最近的一次添加閏秒是在2016年12月31日23:59:60。

UNIX時間

UNIX時間,或稱POSIX時間是UNIX或類UNIX系統使用的時間表示方式。一般定義為從協調世界時(UTC時間)1970年1月1日0時0分0秒起至現在的總秒數。考慮到閏秒的話,更精確的定義為從協調世界時(UTC時間)1970年1月1日0時0分0秒起至現在經過閏秒調整之后的總秒數。

UNIX時間戳與閏秒

由於閏秒的存在,當有調整閏秒發生時,某個Unix時間戳可能表示兩個時刻。但是閏秒的調整並沒有一定的規律,這就會導致在用unix時間戳來計算時間間隔時不准確。計算機通過網絡時間協議(Network Time Protocol,NTP)來接收閏秒調整的消息。

這篇博客說明了這個問題並給出了一個有意思的建議鏈接

[1] 平均太陽日是人們根據觀察加上人為調整后,得出的時間單位,一個平均太陽日是固定的24個小時。
[2] 1960. 自歷書時1900年1月1日12時起算的回歸年的31,556,925.9747分之一為一秒
[3] 1秒為銫133原子基態的兩個超精細能階間躍遷對應輻射的9,192,631,770個周期的持續時間。
[4] https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html
[5] 國際原子時標是一種連續性時標,以原子鍾所定義的秒為基本單位,由1958年1月1日0時0分0秒起,以日、時、分、秒計算。原子時標的准確度為每 日數納秒,而世界時的准確度則只為數毫秒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM