關於時間格式以及時區的簡單理解

  對於剛入門開發的人員,常常是對時間的存儲沒有深刻去理解,而是代碼執行符合預期了以後就不考慮了,遇到問題了再調整爲符合預期,而後就無論了。程序員

  緣由也很簡單,沒空,沒耐心。可是卻每次都有針對這個問題作臨時解決方案。數據庫

  這裏就記錄我對時區的理解:開發

  

  時間其實就是時間軸上的一個點。產品

  咱們平時經過天然語言對時間作描述的時候,常常作不少的省略,只要接受信息的對方可以正確理解就夠了。入門

  譬如:程序

  一、你12點的時候在哪裏?時間戳

  二、如今時間是 15:38分。統計

  三、這條記錄的建立時間是2018-01-19 21:19:33 。數據

      第一條,咱們只說明瞭時間是12點,其它信息都是根據當前會話場景中來的;語言

  第二條,咱們只說明瞭時間和分鐘

  第三條,咱們說明了不少信息,可是卻沒能嚴謹的肯定時間點,咱們遺失了時區的信息和 影響到時間精確度的毫秒值。

 咱們平時在描述數據中準確描述時間的方式如:

  一、1516368486378 ms

  二、Fri Jan 19 2018 21:28:06 GMT+0800 (HKT)

  三、2018-01-19T13:28:06.378Z

   上面3個時間是3種描述時間的方式,描述的倒是同一個時間點,對於程序員來講都不陌生 :

  一、是一個精確到毫秒的時間戳

  二、是一個帶時區爲東八區的時間格式

  三、是一個ISO格式的時間

   咱們在定義數據的時候不考慮存儲消耗,把完整的時間存起來就ok了,其實沒那麼複雜。

 而複雜的是,咱們常常在不理解的狀況下,本能的要跟本身生活中時間的時間混淆,丟棄時區的信息。

 

  理論上,咱們是不須要時區的,若是全世界都用同一個時間,那就沒有那麼多複雜的事情了,可是,人的行爲跟一天中太陽的位置頗有關係,因此就須要比較直觀的時間來知道當前是起牀的時間仍是睡覺的時間。若是給一個這個時間 2018-01-19T13:28:06.378Z  ,它是不帶時區的,因此,東八區的人民就須要把小時加8才能知道對應的時間太陽在哪裏。

      因此,結論就是在數據中時間主要是要存儲完整,不須要考慮時區,而時區是取決於看這數據的人。  

  例如:

    你的數據庫中存儲了一個時間2018-01-19T13:28:06.378Z,而對於查看這個數據的人,你的顯示是不同的,

      對於東八區的人們,應顯示2018-01-19 21:28:06

      對於零時區的人們,應顯示2018-01-19 13:28:06

      對於西二區的人們,應顯示2018-01-19 11:28:06

  這個很號理解,數據是沒有時區概念的,只有給看的人作顯示的時候纔有時區的概念。

  

  例如:

    產品給你提了一個須要,要求你統計上個月的總收入爲多少?(咱們當前的時間爲 2018-01-19 21:28:06 (東八區) )

  分析:

 

    產品要的時間數據時間爲[2017-12-01 , 2018-01-01) 

    這個須要注意的是時區,產品的確切意圖是以本身所在時區的以上時間,因此對應到 世界時間的時候,應該是[2017-12-01  08:00:00  , 2018-01-01 08:00:00 ) 

    因此,咱們只須要統計[2017-12-01  08:00:00  , 2018-01-01 08:00:00 ) 時間段裏面的全部訂單的總額就能夠了。

  

 

如何解決問題

相關文章
相關標籤/搜索