在MongoVUE中发现插入的时间和实际的时间相差8小时?
来源:互联网 发布:网络语音平台 编辑:程序博客网 时间:2024/05/16 23:39
在Mongodb使用过程中,发现一个问题,就是我们插入Date类型时会发现保存到mongodb中的数据却晚了8个小时,这是为什么呢?我想大家在使用客户端工具如MongoVUE时,也会发现查询出来的数据也是晚了8个小时的?下面简单描述下原因。
上面的两个问题,我们依次来看是为什么?
(1)在Java编码过程中,使用mongodb的java驱动包保存数据时,数据库里的数据比实际时间少了8个小时,为什么?
为了找打原因,我下载了个mongodb的java驱动包,想通过驱动包来找到原因,驱动包如下:
我们都知道,mongodb数据库是基于文档的,每个文档都是一个类json格式的,那么肯定在保存到数据库时进行了某种json序列化操作,我们朝着这个方向去找到相关的序列化类,我们在com.mongodb.util包下看到一个JSON类,在这个类里有如下逻辑进行序列化:
可见,对于任何类型是先找到相对应的序列化类(有点像hessian、fastjson的实现),然后调用对应的序列化类对对象Object进行序列化操作。
我们在JSONSerializers这个类内部看到这么一段:
这句用于将java.util.Date类型与LegacyDateSerializer序列化类进行了绑定,使用该类对java.utl.Date类型进行序列化,我们看看是怎么序列化的:
从代码可以看出来,其实对于我们的Date类型都是转换为国际标准时间GMT的,而我们的时区是东八区(GMT+8),因此经过转换为时间少了8个小时,在数据库中看到的也就少了8个小时。
现在我们知道了原因,那么这种情况影不影响我们的业务呢?没有影响的,因为在我们读取的时候mongodb的java驱动同样为我们做了相应的转换工作。
(2)使用MongoVue客户端软件操作mongodb数据库时看到的数据和实际保存时间相差8个小时为什么?
其实,通过上面的描述我们其实很容易理解看到的数据为什么少了8个小时,但是怎样才能看到我们实际的时间呢?
在Tools下面有个Preferences;
选择Views,可以看到我们这时候选择的是UTC;
这时候我们需要选择成上面的,使用本地时区进行显示:
这时候我们就可以在这个客户端工具中看到时间我们插入的时间是一致的了。Do you get it? ^_^
http://blog.csdn.net/majinggogogo/article/details/51810025
- 在MongoVUE中发现插入的时间和实际的时间相差8小时?
- 在MongoVUE中发现插入的时间和实际的时间相差8小时?
- 获取的NSDate时间和实际相差8个小时的解决方案
- PHP 中 Date 函数与实际时间相差8小时的解决方法
- iOS-获取的NSDate date时间与实际相差8个小时解决方案
- iOS-获取的NSDate date时间与实际相差8个小时解决方案
- iOS-获取的NSDate date时间与实际相差8个小时解决方案
- 获取的[NSDate date]时间与实际相差8个小时解决方案
- iOS-获取的NSDate date时间与实际相差8个小时解决方案
- iOS-获取的NSDate date时间与实际相差8个小时解决方案
- 时间相差8小时
- java 和系统时间相差8小时
- 容器和本地时间相差8小时
- 解决[NSdata data]与实际时间相差八个小时的方案
- 解决时间相差8小时 && 与当前时间相差n个月、n天的代码
- 解决weblogic与系统时间相差8小时的问题
- 解决weblogic与系统时间相差8小时的问题
- 解决weblogic与系统时间相差8小时的问题
- 动画插补器
- java学习 pattern/matcher
- 关于添加界面右上角三点菜单项
- ueditor.all.min.js报错,jquery.min.js报错,等等一些js文件报错
- 真诚地关心别人
- 在MongoVUE中发现插入的时间和实际的时间相差8小时?
- 分批从ContentResolver获取数据
- 前端开发的前景
- 微笑待人
- 一次Waiting for table metadata lock的处理
- 小工具笔记
- ELK+kafka日志系统搭建-实战
- ONVIF、RTSP/RTP、FFMPEG的开发实录
- 跨平台获取外部系统的数据解析成json并传输到前台展示成列表