秒是一個時間基本單位。一天24小時,一小時60分,一分鐘60秒,這來自於秒的定義——1秒的時間間隔爲平均太陽日[1]的1⁄86400。到了20世紀中葉,人們發現地球自轉的時間並非恆定的,因而在1956年改以地球繞太陽軌道公轉一週的時間來定義秒[2]。1967年,改用原子共振頻率來定義秒[3],並在此基礎上製做出了原子鐘。目前,原子鐘是世界上已知最準確的時間測量和頻率標準。html
格林尼治平時(Greenwich Mean Time,GMT),又稱爲格林尼治標準時間。
格林尼治平時的正午是指當平太陽橫穿格林尼治子午線時(也就是在格林尼治上空最高點時)的時間。自1924年2月5日開始,格林尼治天文臺負責每隔一小時向全世界發放調時信息。因爲地球天天的自轉是有些不規則的,並且正在緩慢減速,所以格林尼治平時基於天文觀測自己的缺陷,已經被原子鐘報時的協調世界時(UTC)所取代。web
在http協議中規定,全部時間都要轉換爲GMT時間[4],例如
date: Sat, 19 May 2018 17:17:24 GMT
網絡
世界時(Universal Time,UT),是一種以格林尼治子夜起算的平太陽時。
因爲1925年之前人們在天文觀測中,經常把天天的起始(0時)定爲正午,而不是一般民用的午夜,給格林尼治平時的意義形成含糊,人們使用世界時一詞來明確表示天天從午夜開始的格林尼治平時。unix
時區是指地球上的某一個區域使用同一個時間定義。GMT時間或者UT時間,都是表示地球自轉速率的一種形式。從太陽升起到太陽落下,時刻從0到24變化。這樣,不一樣經度的地方時間天然會不相同。爲了解決這個問題,人們把地球按經度劃分爲不一樣的區域,每一個區域內使用同一個時間定義,相鄰的區域時間差爲1個小時。時區又分爲理論時區和法定時區。code
按經度,每15°爲一個時區,將地球劃分爲24個時區,以本初子午線爲中心,向東西兩側各延伸7.5°的區域爲0時區。htm
法定時區是在理論時區的基礎上,根據某些地區的國界線作了調整以後的時區。爲實際使用的時區。例如中國橫跨東五區到東九區五個時區,但統一使用東八區時間(北京時間)。blog
某個地方的時刻與0時區的時刻差稱爲時差,時差東正西負。以本初子午線爲中心,每向東一跨過一個時區,時刻增長一個小時,每向西跨過一個時區,時刻減小一個小時。get
如何理解向東時區增長
因爲地球是自西向東轉,在地球的某一個地方觀察,東邊的時間比西邊的時間早(東邊的人們先看到太陽升起)。
想象一下某一個時刻,太陽在你的正上空,此時你所在的地點的時間爲正午12點。這時住在你東邊的人們,他們看到太陽已經在西邊了,他們的時刻是下午,因此往東,時刻增長。博客
大致以180度經線爲日界線。當自西向東穿過日期變動線時,日期須要減小一天,反之,日期增長一天。class
協調世界時(Coordinated Universal Time)。是主要的世界時間標準,以原子鐘所定義的秒長爲基礎,在時刻上儘可能接近GMT時間。UTC時間認爲一個太陽日老是86400秒。在大多數狀況下,UTC時間能與GMT時間互換。
本初子午線所在的時區的時間後面加上字符Z
,表示UTC時間。Z
即爲0時區的標誌,讀作Zulu
。例如09:30 UTC
就寫做0930Z
,14:45:15 UTC
則爲14:45:15Z
或144515Z
。
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時間 + 時差 = 本地時間
例如:
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
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時間,或稱POSIX時間是UNIX或類UNIX系統使用的時間表示方式。通常定義爲從協調世界時(UTC時間)1970年1月1日0時0分0秒起至如今的總秒數。考慮到閏秒的話,更精確的定義爲從協調世界時(UTC時間)1970年1月1日0時0分0秒起至如今通過閏秒調整以後的總秒數。
因爲閏秒的存在,當有調整閏秒發生時,某個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秒起,以日、時、分、秒計算。原子時標的準確度爲每 日數納秒,而世界時的準確度則只爲數毫秒。