秒
秒是一個時間基本機關。一天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
就寫作
0930Z
,
14:45:15 UTC
則為
14:45:15Z
或
144515Z
。
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時間 + 時差 = 本地時間
例如:
- UTC時間
,UTC+0800(北京)2018-05-20 09:30:00 UTC
,UTC-0500(紐約)2018-05-20 17:30:00 +8000
2018-05-20 04:30:00 -0500
- UTC時間
,UTC+0530(印度)2018-05-20 01:30:00 UTC
,UTC-1000(夏威夷)2018-05-20 07:00:00 +0530
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秒起,以日、時、分、秒計算。原子時标的準确度為每 日數納秒,而世界時的準确度則隻為數毫秒。