咱們在編程時,不可避免地會和時間打交道。 好比要完成一次秒殺活動, 就會涉及到時間存取,時間同步和時間差值計算等諸多細節。一個JavsScript的簡單例子,當咱們在瀏覽器控制檯輸入new Date()
, 會獲得以下結果:javascript
Sun Oct 30 2016 16:27:04 GMT+0800 (CST)
輸出前半部分的含義很容易理解, 它表明的是2016年10月30日 星期日,下午16點27分04秒, 後半部分的GMT
,+0800
, CST
到底表明什麼呢, 本着一探究竟的想法, 本文來帶你們詳細瞭解下JS中的時間。html
在古代, 天文學的一個最重要任務就是度量時間,制定曆法。我國古代將一年分爲十二月、二十四節氣,一天分爲十二個時辰,目的就是爲了一套高效的時間表示方法用以指導農耕。隨着現代社會的發展,時間的表示也須要一套更加科學而精確的方法。java
遠古時代,人類是根據太陽與地球的角度變化來做息的, 人們都是日出而做, 日落而息, 人類一直遵循着這種延續下來的做息規律。這時的人們對於時間沒有什麼特別的概念,也不用計時工具。編程
在中國周代,人們將一天分爲12個時辰:子、醜、寅、卯、辰、巳、午、未、申、酉、戊、亥,分別對應夜半、雞鳴、平旦、日出、食時、隅中、日中、日昳、晡時、日入、黃昏、人定。用來指導人們一天的生活規律。這時,咱們用沙漏、日晷來記錄大體的時間,能夠區別出來的最短期是1個時辰(2h)。瀏覽器
後來,工業革命將人類帶入了工業時代,此時人們對於時間有了更精細的劃分,一天被分爲12個小時, 每小時60分, 每分60秒。爲了更高效地生產,咱們用鐘錶來記錄時間,咱們對於時間的利用也達到了秒級。服務器
而如今,咱們的計時工具已經升級成了冷原子鐘。 好比我國的北斗導航衛星系統使用的就是原子鐘來記錄時間,其計時精度已經達到納秒級別(1ns=10^-9s)。咱們已將空間和時間結合到了一塊兒,能夠經過時間來推算空間,在空間中轉換時間。工具
ps: 曾經在園區聽過中科院博導徐穎關於北斗的演講, 不由爲人類的創造力和中國的強大國力所折服。設計
隨着人類文明的進步,計時工具也在不斷地發展。藉助這些工具,人類對於時間的劃分愈來愈細, 對於時間資源的利用率也愈來愈高。code
咱們用時間單位來表達特定的時間間隔,經常使用的時間單位如: 世紀、年、季度、月、日、小時、分、 秒、 毫秒、微妙、納秒等。當前人類能夠測量的最短的時間單位是阿秒(attosecond),爲中性π介子的壽命, 至關於10^-18 秒。server
能夠說,人們時間的細分過程和標準制定過程,實際上是人類探索時間,利用時間的過程。 咱們對於時間單位的認知,能夠從側面反映咱們對自身所處的時空的認知。時間單位也折射出人類科學文明的發展歷程。
咱們平時常說,如今9點鐘了, 其實指的就是時刻。咱們要表達的是當前已經達到9點這個時間點了。它是既沒有大小也沒有方向的,它只表達一個具體的時間點。
就比如咱們用尺子來衡量長度, 咱們也在用一把標記着秒,小時的「尺子」來衡量時間。而時刻,只是咱們均可理解的尺子上的某一個刻度。惟一的差異是, 空間中的長度一般是不變的, 而時間永遠是在是不可逆地增長的。
首先,咱們應認識到,在整個宇宙中, 時間是統一的。 從宇宙的誕生到如今, 老是能夠用一個特定的時間間隔值來表示咱們所經歷的時間,它是一個固定的值。 那麼咱們不由會問爲何會說咱們這兒是早上9點,而英國那邊確是凌晨1點呢,這不是兩個不一樣的時間嗎?這就要引出咱們下面將提到的時間標準問題。
在之前,人類的活動範圍相對狹小,基本不會注意到時區對於人類做息的影響。咱們徹底想象不到, 當咱們在陽光下辛勤勞做的時候, 地球另外一面的人們早已進入夢鄉。
可是工業革命以後,人類的生產和交通工具不斷進步,全球化協做成爲不可阻擋的潮流。 此時人們已經意識到了地球在不停地自西向東自轉, 自轉一週則爲一日。而不一樣經度的地區日出的時間是有前後差別的。好比中國北京仍是正午的時候,大洋彼岸的美國紐約正好是深夜。早上8點咱們一個電話打過去, 說美國的XXX, 該上班了, 對方必定是一臉的迷(meng)茫(bi), 我這準備洗洗睡呢。
正是人們認識到地球自轉的天文規律,才須要制定一套全球統一的時間標準,這樣,咱們根據本地時間就能夠推算出地球任何地區的當地時間(日出日落時間),以方便進行更好的協做。
格林尼治是位於英國倫敦郊區的皇家格里尼治天文臺, 咱們常常說的格林尼治時間指的就是以此地的時間爲標準時間制定的一套時間計量系統。
爲了準確地表示各地時間,1884年,國際經度會議決定將經過英國格林尼治天文埃裏中星儀的經線定爲計算經度的起算經線,稱爲本初子午線。以本初子午線的平子夜起算的平太陽時,分別向東、西計量增減12時,做爲統一的時間標準,稱爲格林尼治平時。這也就是GMT時間的由來,它是根據地球的自轉所定義的一套時間標準,其對於平常生活, 天文導航和宇宙飛行等人類活動具備重要做用。
GMT的制定同時也產生了時區的概念。咱們在聽關於國外的新聞報道的時候,常常會聽到於當地時間XX時XX分,本地時間yy時yy分發生了什麼大事,而後是balabala。 這其實就是在時間的表示上避免位於不一樣時區的人對於時間理解的差別。
時區(Time Zone), 設定了一個區域的標準時間。 理論上, 以被15整除的子午線爲中心, 向東西各延伸7.5經度,劃分爲一個時區。實際上,因爲各個國家的版圖不規則, 一般會跨越多個時區, 因此國家內部還會規定整個行政區域內的一個實際時區,稱爲法定時區。好比中國, 從西到東橫跨東5、東6、東7、東八和東九五個時區, 中華人民共和國成立之後,全國統一採用首都北京所在的東八時區的區時做爲標準時間,稱爲北京時間。
UTC一般被誤認爲是GMT, 其實二者的表示方法徹底不一樣。
人類觀測到地球自轉的緩慢降低,地球自轉一週耗時通過一段時間後會多於現行的24小時,所以GMT時間已再也不適合做爲標準時間使用。如今的標準時間是由原子鐘報時的協調世界時,這是由國際計量局和國際地球自轉服務(IERS)維護的時間標度,是各標準頻率和時間信號協協調播發基準。
那爲何又要搞個UTC呢,太亂了吧? 其實誰也不想這麼麻煩, 這是地球本身「轉」出來的。
咱們常識性認爲地球自轉一週是24小時,而因爲地球自轉速度變慢,在通過了24h以後,地球可能尚未成一週的運轉, 爲了保證24h和地球完整的一週相匹配,就必須讓鐘錶上的時間等待地球自轉一週完成,這就是協調世界時中「協調」二字的含義。UTC時間相較於國際原子鐘時間(International Atomic Time, TAI)
實際是要慢的。
注:秒是基本的時間國際單位,國際上如今標準的1秒爲:銫133原子基態的兩個超精細能級間躍遷對應的輻射的9,192,631,770個週期的持續時間
說白了,TAI時間是基於原子規律定義的時間,這個時間長時間不會變化。UTC是爲了符合地球自轉週期所制定的時間, UTC會讓全球的鐘表都停下來,補上地球自轉變慢的差值, 而矯正和同步機構就是IERS。全球全部國家根據UTC時間和各自國家所在的時區肯定當地時間,以此來保證全球時間的低偏差同步。
UTC以加入閏秒(leap-secons)的方式對時間進行修正,以消除地球自轉變慢的影響。閏秒是爲了平衡因地球自轉變慢所引發的和原子鐘的時間差而特地設置的。若是不加入閏秒,可能過幾萬年以後,中午的12點會變成凌晨0點; 再過個幾百萬年,日曆上的冬天會變成了夏天了,那麼整個生產生活就會亂套了。
閏秒的引入時機是每一年的6月和12月月末, 視UTC-TAI的演變差值而定,而且每隔六個月會公佈是否須要加入閏秒(這就是IERS乾的活兒)。
上次閏秒的引入時間是UTC 2015-6-30 23:59:60
而下一次的閏秒引入會在:
2016-12-31 23:59:59 2016-12-31 23:59:60 2017-01-01 00:00:00
從2015-07-01 00:00:00 UTC 到 2017-01-01 00:00:00 UTC 時間差別是: UTC - TAI = -36s. 也就是說,咱們的UTC時間標準相較於真正的原子鐘時間,人爲地慢了36秒。
PS1: 是否是感受本身賺到了, 多活了36s呢!
PS2: 人類當前所用的時間大多都已是UTC時間了, 可是不少時候還保留着GMT的時區劃分規則,因此不少地方顯示的仍是GMT時間。
再來講一下我國的時間基準, 北京時間不是在北京肯定的,而是由位於中國版圖幾何中心位置陝西臨潼和陝西蒲城的中國科學院國家授時中心(國家授時臺)的9臺銫原子鐘(銫鐘)和2臺氫原子鐘組經過精密比對和計算實現,並經過衛星與世界各國授時部門進行實時比對肯定的。國內的設備能夠經過國家授時中心提供的NTP(Network Time Protocol)服務器和本地時間進行同步。具體使用能夠參看此處。
在Mac上, 能夠經過以下命令和制定的NTP服務器進行校時:
➜ ~ sudo ntpdate -u cn.pool.ntp.org
1 Nov 03:20:08 ntpdate[84376]: adjust time server 59.46.44.253 offset 0.014804 sec
➜ ~
再回到文章最開始所提到的, new Date()
在輸出數據, 全部的內容就清晰了:
GMT
, 表明的格林尼治平時,但此處的GMT所表示的意思是:時間使用的時區是GMT標準,採用的是UTC時間
+0800
表明的是當前時間和標準時間的時差, 精確到分。+0800, 表示當前時間早於UTC時間8小時整
CST
指的是北京時間
done!
一門程序設計語言中有不少細節, 每每蘊含着極大的智慧。以本文提到的時間爲例, 幾個簡單的單詞, 其中蘊含了人類近幾百年的科技文明發展成果,也反映了人類對於時間的尊重和敬畏,每一處都值得細細品味。
原文:http://lianmin.me/2016/10/30/...
[1] 閏秒(leap seconds): http://tycho.usno.navy.mil/le...
https://hpiers.obspm.fr/iers/...
[2] 日期和時間表示法(國標 GB/T 7408-2005) http://www.cmaph.org/attachme...
[3] 24小時制: https://zh.wikipedia.org/wiki...
[4]時間: https://zh.wikipedia.org/wiki...