时区纪要

          问题描述:mongodb使用过程中,发现插入mongodb之前的时间为14点,插入mongodb以后,显示时间为6点,取出mongodb的时间还是14点。换言之,插入mongodb的时间,并没有错,只是被服务器的时区同化了。

         解决过程:

 服务器时区如下:

通过百度搜索得知,以下情况:


本地的服务器时区如下:



初步怀疑是时区不一致造成的,一个是CST,一个是UTC。实践发现并不是,找了一台时区一致的服务器,发现mongodb中的时间数据还是少了八个小时。

          实践结论:mongodb对时间的处理ISODate与java中的java.util.Date的时间相差了8个小时。这是由于mongo中的date类型是以UTC(Coordinated Universal Time)存储,就等于GMT(格林尼治标准时间)时间。而当前服务器时间所处的是东8区(+8),所以mongo shell会将当前的GMT+08时间减去8,存储成GMT时间。因而mongodb查询时,看到的时间少了8个小时。当通过Java去获取mongodb里的时间时,Java的驱动对时区做了处理,所以返回的结果又是当前服务器的时区。

时区小课堂:

1.UTC指的是Coordinated Universal Time-时间协调时间(又称世界标准时间、世界同一时间),是经过平均太阳时(以格林威治时间GMT-Greenwich Mean Time为准)、地轴运动修正后的新时标以及以‘秒’为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以‘世界标准时间’的角度来说,UTC比GMT来得更加精准。

扫描二维码关注公众号,回复: 330921 查看本文章

2.时区分为东西区,越往西走,时间越慢;越往东走,时间越快。相邻时间相差1小时。中国处在东八区。


 

猜你喜欢

转载自shiqiaopinglove.iteye.com/blog/2388413