欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

时区纪要 博客分类: 应用问题  

程序员文章站 2024-03-12 12:52:32
...

          问题描述: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来得更加精准。

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