问题描述: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小时。中国处在东八区。
相关推荐
C#调用Windows API获取和修改时区,C#提升进程修改时区的权限
Linux系统手动修改时区和时间: 1.修改时区: 2.关于时区的设置:
1. 查看当前时区 # vi /etc/sysconfig/clock 2. 修改设置时区 方法(1) # tzselect 方法(2 仅限于RedHat Linux 和 CentOS) # timeconfig 3. 复制相应的时区文件,替换系统默认时区 # cp /usr/share/zoneinfo/$主...
很多简装系统没有时区,这个压缩文件有三个注册表 把三个注册表分别使用,可把系统时间的时区补全
Android 时区自动更新
c# 时区 api SetTimeZoneInformation
警告:在区域“其他”中,在此请不要使用任何时区列表(除 UTC 外),仅用于向后兼容。 在“时差”中,指的是,设定时区与格林威治时间(GMT)的差别。 关于PHPzone,认真、固执、盲目。 wangyouworld wangyouworld#...
oracle19.0时区版本35补丁p31335037_190000_Linux-x86-64.zip 注意:此补丁只适用于oracle19.3版本用来添加35版本时区,其他版本使用会报错 我会再上传一个适用于19c所有oracle版本的35版本时区补丁 补丁用于解决ORA...
win7系统全部时区的注册表文件,下载后双击即可加入到系统注册表中,这时全部时区都会显示出来。
解决误删时区的问题,可用于windows各类版本。希望对大家有用。
1 android 世界时区; 2 数据存储世界时区,含经纬度
可根据设定的时间范围,自动修改时区,使时间定位在某段范围内,使用Serveice实现后台运行!
关于系统时区设置的问题,详细的解析
车机导航时间时区错误修正,修复车机上时区错误,导致的高德导航时间错误
Delphi获取世界时区信息,程序基于Delphi7开发,未使用控件,在D7下直接编译运行。运行后会显示世界各个时区信息,类似于Windows区域设置中的时区信息。
禁止修改PC时间和时区,避免因系统时间被篡改带来的损失
1. 获取时区时间 public static ZonedDateTime getNow(int offset) 2. 解析指定时间 public static ZonedDateTime parse(String date,String dateFormat,int offset) 3. 获取某一天的零点 public static ...
世界范围内的时区列表。由 java.util.TimeZone 类导出
从安卓源码中获取的时区列表,只是稍微修改了下。
系统时区损坏,找不到时区注册信息,可以下载这个文件安装