成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Javascript中的時間

MageekChiu / 1159人閱讀

摘要:比如中國,從西到東橫跨東五東六東七東八和東九五個時區(qū),中華人民共和國成立以后,全國統(tǒng)一采用首都北京所在的東八時區(qū)的區(qū)時作為標(biāo)準(zhǔn)時間,稱為北京時間。全球所有國家根據(jù)時間和各自國家所在的時區(qū)確定當(dāng)?shù)貢r間,以此來保證全球時間的低誤差同步。

我們在編程時,不可避免地會和時間打交道。 比如要完成一次秒殺活動, 就會涉及到時間存取,時間同步和時間差值計(jì)算等諸多細(xì)節(jié)。一個JavsScript的簡單例子,當(dāng)我們在瀏覽器控制臺輸入new Date(), 會得到如下結(jié)果:

Sun Oct 30 2016 16:27:04 GMT+0800 (CST)

輸出前半部分的含義很容易理解, 它代表的是2016年10月30日 星期日,下午16點(diǎn)27分04秒, 后半部分的GMT,+0800, CST到底代表什么呢, 本著一探究竟的想法, 本文來帶大家詳細(xì)了解下JS中的時間。

1.時間的表示

在古代, 天文學(xué)的一個最重要任務(wù)就是度量時間,制定歷法。我國古代將一年分為十二月、二十四節(jié)氣,一天分為十二個時辰,目的就是為了一套高效的時間表示方法用以指導(dǎo)農(nóng)耕。隨著現(xiàn)代社會的發(fā)展,時間的表示也需要一套更加科學(xué)而精確的方法。

度量 從計(jì)時工具說起

遠(yuǎn)古時代,人類是根據(jù)太陽與地球的角度變化來作息的, 人們都是日出而作, 日落而息, 人類一直遵循著這種延續(xù)下來的作息規(guī)律。這時的人們對于時間沒有什么特別的概念,也不用計(jì)時工具。

在中國周代,人們將一天分為12個時辰:子、丑、寅、卯、辰、巳、午、未、申、酉、戊、亥,分別對應(yīng)夜半、雞鳴、平旦、日出、食時、隅中、日中、日昳、晡時、日入、黃昏、人定。用來指導(dǎo)人們一天的生活規(guī)律。這時,我們用沙漏、日晷來記錄大致的時間,可以區(qū)別出來的最短時間是1個時辰(2h)。

后來,工業(yè)革命將人類帶入了工業(yè)時代,此時人們對于時間有了更精細(xì)的劃分,一天被分為12個小時, 每小時60分, 每分60秒。為了更高效地生產(chǎn),我們用鐘表來記錄時間,我們對于時間的利用也達(dá)到了秒級。

而現(xiàn)在,我們的計(jì)時工具已經(jīng)升級成了冷原子鐘。 比如我國的北斗導(dǎo)航衛(wèi)星系統(tǒng)使用的就是原子鐘來記錄時間,其計(jì)時精度已經(jīng)達(dá)到納秒級別(1ns=10^-9s)。我們已將空間和時間結(jié)合到了一起,可以通過時間來推算空間,在空間中轉(zhuǎn)換時間。

ps: 曾經(jīng)在園區(qū)聽過中科院博導(dǎo)徐穎關(guān)于北斗的演講, 不禁為人類的創(chuàng)造力和中國的強(qiáng)大國力所折服。

隨著人類文明的進(jìn)步,計(jì)時工具也在不斷地發(fā)展。借助這些工具,人類對于時間的劃分越來越細(xì), 對于時間資源的利用率也越來越高。

時間單位

我們用時間單位來表達(dá)特定的時間間隔,常用的時間單位如: 世紀(jì)、年、季度、月、日、小時、分、 秒、 毫秒、微妙、納秒等。當(dāng)前人類可以測量的最短的時間單位是阿秒(attosecond),為中性π介子的壽命, 相當(dāng)于10^-18 秒。

可以說,人們時間的細(xì)分過程和標(biāo)準(zhǔn)制定過程,其實(shí)是人類探索時間,利用時間的過程。 我們對于時間單位的認(rèn)知,可以從側(cè)面反映我們對自身所處的時空的認(rèn)知。時間單位也折射出人類科學(xué)文明的發(fā)展歷程。

時刻

我們平時常說,現(xiàn)在9點(diǎn)鐘了, 其實(shí)指的就是時刻。我們要表達(dá)的是當(dāng)前已經(jīng)達(dá)到9點(diǎn)這個時間點(diǎn)了。它是既沒有大小也沒有方向的,它只表達(dá)一個具體的時間點(diǎn)。
就好比我們用尺子來衡量長度, 我們也在用一把標(biāo)記著秒,小時的“尺子”來衡量時間。而時刻,只是我們都可理解的尺子上的某一個刻度。唯一的差別是, 空間中的長度通常是不變的, 而時間永遠(yuǎn)是在是不可逆地增加的。

2. 時間標(biāo)準(zhǔn)化

首先,我們應(yīng)認(rèn)識到,在整個宇宙中, 時間是統(tǒng)一的。 從宇宙的誕生到現(xiàn)在, 總是可以用一個特定的時間間隔值來表示我們所經(jīng)歷的時間,它是一個固定的值。 那么我們不禁會問為什么會說我們這兒是早上9點(diǎn),而英國那邊確是凌晨1點(diǎn)呢,這不是兩個不同的時間嗎?這就要引出我們下面將提到的時間標(biāo)準(zhǔn)問題。

在以前,人類的活動范圍相對狹小,基本不會注意到時區(qū)對于人類作息的影響。我們完全想象不到, 當(dāng)我們在陽光下辛勤勞作的時候, 地球另一面的人們早已進(jìn)入夢鄉(xiāng)。

但是工業(yè)革命之后,人類的生產(chǎn)和交通工具不斷進(jìn)步,全球化協(xié)作成為不可阻擋的潮流。 此時人們已經(jīng)意識到了地球在不停地自西向東自轉(zhuǎn), 自轉(zhuǎn)一周則為一日。而不同經(jīng)度的地區(qū)日出的時間是有先后差異的。比如中國北京還是正午的時候,大洋彼岸的美國紐約正好是深夜。早上8點(diǎn)我們一個電話打過去, 說美國的XXX, 該上班了, 對方一定是一臉的迷(meng)茫(bi), 我這準(zhǔn)備洗洗睡呢。

正是人們認(rèn)識到地球自轉(zhuǎn)的天文規(guī)律,才需要制定一套全球統(tǒng)一的時間標(biāo)準(zhǔn),這樣,我們根據(jù)本地時間就可以推算出地球任何地區(qū)的當(dāng)?shù)貢r間(日出日落時間),以方便進(jìn)行更好的協(xié)作。

格林尼治平時(Greenwich Mean Time, GMT)

格林尼治是位于英國倫敦郊區(qū)的皇家格里尼治天文臺, 我們經(jīng)常說的格林尼治時間指的就是以此地的時間為標(biāo)準(zhǔn)時間制定的一套時間計(jì)量系統(tǒng)。

為了準(zhǔn)確地表示各地時間,1884年,國際經(jīng)度會議決定將通過英國格林尼治天文埃里中星儀的經(jīng)線定為計(jì)算經(jīng)度的起算經(jīng)線,稱為本初子午線。以本初子午線的平子夜起算的平太陽時,分別向東、西計(jì)量增減12時,作為統(tǒng)一的時間標(biāo)準(zhǔn),稱為格林尼治平時。這也就是GMT時間的由來,它是根據(jù)地球的自轉(zhuǎn)所定義的一套時間標(biāo)準(zhǔn),其對于日常生活, 天文導(dǎo)航和宇宙飛行等人類活動具有重要作用。

GMT的制定同時也產(chǎn)生了時區(qū)的概念。我們在聽關(guān)于國外的新聞報(bào)道的時候,經(jīng)常會聽到于當(dāng)?shù)貢r間XX時XX分,本地時間yy時yy分發(fā)生了什么大事,然后是balabala。 這其實(shí)就是在時間的表示上避免位于不同時區(qū)的人對于時間理解的差異。

時區(qū)(Time Zone), 設(shè)定了一個區(qū)域的標(biāo)準(zhǔn)時間。 理論上, 以被15整除的子午線為中心, 向東西各延伸7.5經(jīng)度,劃分為一個時區(qū)。實(shí)際上,由于各個國家的版圖不規(guī)則, 通常會跨越多個時區(qū), 所以國家內(nèi)部還會規(guī)定整個行政區(qū)域內(nèi)的一個實(shí)際時區(qū),稱為法定時區(qū)。比如中國, 從西到東橫跨東五、東六、東七、東八和東九五個時區(qū), 中華人民共和國成立以后,全國統(tǒng)一采用首都北京所在的東八時區(qū)的區(qū)時作為標(biāo)準(zhǔn)時間,稱為北京時間。

協(xié)調(diào)世界時(Coordinated Universal Time, UTC)

UTC通常被誤認(rèn)為是GMT, 其實(shí)兩者的表示方法完全不同。

UTC的由來

人類觀測到地球自轉(zhuǎn)的緩慢下降,地球自轉(zhuǎn)一周耗時經(jīng)過一段時間后會多于現(xiàn)行的24小時,因此GMT時間已不再適合作為標(biāo)準(zhǔn)時間使用?,F(xiàn)在的標(biāo)準(zhǔn)時間是由原子鐘報(bào)時的協(xié)調(diào)世界時,這是由國際計(jì)量局和國際地球自轉(zhuǎn)服務(wù)(IERS)維護(hù)的時間標(biāo)度,是各標(biāo)準(zhǔn)頻率和時間信號協(xié)協(xié)調(diào)播發(fā)基準(zhǔn)。

那為什么又要搞個UTC呢,太亂了吧? 其實(shí)誰也不想這么麻煩, 這是地球自己“轉(zhuǎn)”出來的。

我們常識性認(rèn)為地球自轉(zhuǎn)一周是24小時,而由于地球自轉(zhuǎn)速度變慢,在經(jīng)過了24h之后,地球可能還沒有成一周的運(yùn)轉(zhuǎn), 為了保證24h和地球完整的一周相匹配,就必須讓鐘表上的時間等待地球自轉(zhuǎn)一周完成,這就是協(xié)調(diào)世界時中“協(xié)調(diào)”二字的含義。UTC時間相較于國際原子鐘時間(International Atomic Time, TAI)實(shí)際是要慢的。

注:秒是基本的時間國際單位,國際上現(xiàn)在標(biāo)準(zhǔn)的1秒為:銫133原子基態(tài)的兩個超精細(xì)能級間躍遷對應(yīng)的輻射的9,192,631,770個周期的持續(xù)時間

說白了,TAI時間是基于原子規(guī)律定義的時間,這個時間長時間不會變化。UTC是為了符合地球自轉(zhuǎn)周期所制定的時間, UTC會讓全球的鐘表都停下來,補(bǔ)上地球自轉(zhuǎn)變慢的差值, 而矯正和同步機(jī)構(gòu)就是IERS。全球所有國家根據(jù)UTC時間和各自國家所在的時區(qū)確定當(dāng)?shù)貢r間,以此來保證全球時間的低誤差同步。

閏秒

UTC以加入閏秒(leap-secons)的方式對時間進(jìn)行修正,以消除地球自轉(zhuǎn)變慢的影響。閏秒是為了平衡因地球自轉(zhuǎn)變慢所引起的和原子鐘的時間差而特意設(shè)置的。如果不加入閏秒,可能過幾萬年之后,中午的12點(diǎn)會變成凌晨0點(diǎn); 再過個幾百萬年,日歷上的冬天會變成了夏天了,那么整個生產(chǎn)生活就會亂套了。

閏秒的引入時機(jī)是每年的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時間標(biāo)準(zhǔn)相較于真正的原子鐘時間,人為地慢了36秒。

PS1: 是不是感覺自己賺到了, 多活了36s呢!
PS2: 人類當(dāng)前所用的時間大多都已經(jīng)是UTC時間了, 但是很多時候還保留著GMT的時區(qū)劃分規(guī)則,所以很多地方顯示的還是GMT時間。

北京時間(China Standard Time, CST)

再來說一下我國的時間基準(zhǔn), 北京時間不是在北京確定的,而是由位于中國版圖幾何中心位置陜西臨潼和陜西蒲城的中國科學(xué)院國家授時中心(國家授時臺)的9臺銫原子鐘(銫鐘)和2臺氫原子鐘組通過精密比對和計(jì)算實(shí)現(xiàn),并通過衛(wèi)星與世界各國授時部門進(jìn)行實(shí)時比對確定的。國內(nèi)的設(shè)備可以通過國家授時中心提供的NTP(Network Time Protocol)服務(wù)器和本地時間進(jìn)行同步。具體使用可以參看此處。

在Mac上, 可以通過如下命令和制定的NTP服務(wù)器進(jìn)行校時:

? ~ 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
? ~

3. 小結(jié)

再回到文章最開始所提到的, new Date()在輸出數(shù)據(jù), 所有的內(nèi)容就清晰了:

GMT, 代表的格林尼治平時,但此處的GMT所表示的意思是:時間使用的時區(qū)是GMT標(biāo)準(zhǔn),采用的是UTC時間

+0800 代表的是當(dāng)前時間和標(biāo)準(zhǔn)時間的時差, 精確到分。+0800, 表示當(dāng)前時間早于UTC時間8小時整

CST 指的是北京時間

done!

4. 后記

一門程序設(shè)計(jì)語言中有很多細(xì)節(jié), 往往蘊(yùn)含著極大的智慧。以本文提到的時間為例, 幾個簡單的單詞, 其中蘊(yùn)含了人類近幾百年的科技文明發(fā)展成果,也反映了人類對于時間的尊重和敬畏,每一處都值得細(xì)細(xì)品味。

原文:http://lianmin.me/2016/10/30/...

參考文獻(xiàn)

[1] 閏秒(leap seconds): http://tycho.usno.navy.mil/le...
https://hpiers.obspm.fr/iers/...
[2] 日期和時間表示法(國標(biāo) GB/T 7408-2005) http://www.cmaph.org/attachme...
[3] 24小時制: https://zh.wikipedia.org/wiki...
[4]時間: https://zh.wikipedia.org/wiki...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80794.html

相關(guān)文章

  • JavaScript 啟動性能瓶頸分析與解決方案

    摘要:啟動性能瓶頸分析與解決方案翻譯自的,從屬于筆者的前端入門與工程實(shí)踐。我們必須要清醒地認(rèn)識到全面評測以挖掘出真正性能瓶頸的重要性。這可能是最佳的方式了,類似于這樣的模式鼓勵基于路由的分組,目前被與廣泛使用。 JavaScript 啟動性能瓶頸分析與解決方案 翻譯自 Addy Osmani 的 JavaScript Start-up Performance,從屬于筆者的Web 前端入門與工...

    SQC 評論0 收藏0
  • javascript日期類型(Date)與php日期類型詳解

    摘要:注意客戶端與服務(wù)器日期進(jìn)行傳輸?shù)臅r候一般都是用大整數(shù)時間戳進(jìn)行傳輸。 前言 一個網(wǎng)站的開發(fā)需要要UI、前端、后端三種工程師。現(xiàn)在的企業(yè)在招聘前端工程師的時候一般都要求其了解或者掌握一些后端的知識。因此,此文章主要介紹javascript的日期類型,也粗略的介紹一下php的日期類型,以及二者是如何交互數(shù)據(jù)的。 時間戳 什么是時間戳 時間戳是從格林威治時間1970年1月1日(00:0...

    chemzqm 評論0 收藏0
  • javascript日期類型(Date)與php日期類型詳解

    摘要:注意客戶端與服務(wù)器日期進(jìn)行傳輸?shù)臅r候一般都是用大整數(shù)時間戳進(jìn)行傳輸。 前言 一個網(wǎng)站的開發(fā)需要要UI、前端、后端三種工程師。現(xiàn)在的企業(yè)在招聘前端工程師的時候一般都要求其了解或者掌握一些后端的知識。因此,此文章主要介紹javascript的日期類型,也粗略的介紹一下php的日期類型,以及二者是如何交互數(shù)據(jù)的。 時間戳 什么是時間戳 時間戳是從格林威治時間1970年1月1日(00:0...

    BDEEFE 評論0 收藏0
  • 聊聊 JavaScript 中的 Date 對象

    摘要:一起來看看中的日期對象。對象和其他對象如等一樣,對象是語言中的內(nèi)建對象。在工作中,對象有著許多重要的應(yīng)用。這意味著,當(dāng)前時間與標(biāo)準(zhǔn)時區(qū)相差小時。,全稱是國際標(biāo)準(zhǔn)化組織,負(fù)責(zé)制定全世界工商業(yè)國際標(biāo)準(zhǔn)的國際標(biāo)準(zhǔn)。 原文地址: http://www.wemlion.com/2016/d... 時間的發(fā)現(xiàn) 日常生活中,各種形式的時間字符到處都是。 時間觀念的產(chǎn)生,時間單位、計(jì)時工具的發(fā)明,給人...

    adie 評論0 收藏0
  • Event Loop

    摘要:引擎線程,也稱為內(nèi)核,負(fù)責(zé)處理腳本程序,例如引擎。異步請求線程,也就是發(fā)出請求后,接收響應(yīng)檢測狀態(tài)變更等都是這個線程管理的。為了解決這個問題,提出標(biāo)準(zhǔn),允許腳本創(chuàng)建多個線程,但是子線程完全受主線程控制,且不得操作。 本文主要參閱了以下兩篇文章,對JS的Event Loop運(yùn)行機(jī)制基礎(chǔ)知識進(jìn)行了整理。從瀏覽器多進(jìn)程到JS單線程,JS運(yùn)行機(jī)制最全面的一次梳理JavaScript 運(yùn)行機(jī)制詳...

    darkbug 評論0 收藏0
  • 精讀《高性能 javascript

    摘要:嵌套對象成員會造成重大性能影響盡量少用。一般來說你可以通過這種方法提高代碼的性能將經(jīng)常使用的對象成員數(shù)組項(xiàng)和域外變量存入局部變量中。在反復(fù)訪問的地方使用局部變量存放引用小心地處理集合因?yàn)樗麄儽憩F(xiàn)出存在性總是對底層文檔重新查詢。 前言 本期我來給大家推薦的書是《高性能JavaScript》,在這本書中我們能夠了解 javascript 開發(fā)過程中的性能瓶頸,如何提升各方面的性能,包括代碼...

    caohaoyu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<