您的位置:首页 > 其它

关于时间格式以及时区的简单理解

2018-01-19 22:15 267 查看

  对于刚入门开发的人员,经常是对时间的存储没有深入去理解,而是代码执行符合预期了之后就不考虑了,遇到问题了再调整为符合预期,然后就不管了。

  原因也很简单,没空,没耐心。但是却每次都有针对这个问题做临时解决方案。

  这里就记录我对时区的理解:

  

  时间其实就是时间轴上的一个点。

  我们平时通过自然语言对时间做描述的时候,经常做很多的省略,只要接受信息的对方能够正确理解就够了。

  譬如:

  1、你12点的时候在哪里?

  2、现在时间是 15:38分。

  3、这条记录的创建时间是2018-01-19 21:19:33 。

      第一条,我们只说明了时间是12点,其它信息都是根据当前会话场景中来的;

  第二条,我们只说明了时间和分钟

  第三条,我们说明了很多信息,但是却没能严谨的确定时间点,我们遗失了时区的信息和 影响到时间精确度的毫秒值。

 我们平时在描述数据中准确描述时间的方式如:

  1、1516368486378 ms

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

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

   上面3个时间是3种描述时间的方式,描述的却是同一个时间点,对于程序员来说都不陌生 :

  1、是一个精确到毫秒的时间戳

  2、是一个带时区为东八区的时间格式

  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 ) 时间段里面的所有订单的总额就可以了。

  

 

如何解决问题

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: