博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 处理 Spring data mongodb 时区问题
阅读量:7012 次
发布时间:2019-06-28

本文共 1160 字,大约阅读时间需要 3 分钟。

hot3.png

mongo保存日期是一个64-bit整形数。java driver保存Date时会把他自动转换为标准时间GMT。如中国在GMT+8时区,保存2012-01-20 00:00:00到库中,查询后结果竟然是2012-01-19 16:00:00跟想要结果不一致。 可以在com.mongodb.util.JSON找到问题根源:

if (o instanceof Date) {            Date d = (Date) o;            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");            format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT")));            serialize(new BasicDBObject("$date", format.format(d)), buf);            return;        }

所以我们的时间存进去就少了8小时。

下面用java代码写了一个获取写入mongo的时间方法:

/**     * 计算得到MongoDB存储的日期,(默认情况下mongo中存储的是标准的时间,中国时间是东八区,存在mongo中少8小时,所以增加8小时)     * http://www.iteye.com/problems/88507     *      * @author: Gao Peng     * @date: 2016年5月4日 上午9:26:23     * @param: @param     *             date     * @param: @return     * @return: Date     */    public static Date getMongoDate(Date date) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        Calendar ca = Calendar.getInstance();        ca.setTime(date);        ca.add(Calendar.HOUR_OF_DAY, 8);        return String2Date(sdf.format(ca.getTime()));    }

转载于:https://my.oschina.net/xiaominmin/blog/1861590

你可能感兴趣的文章
解决bootstrapvalidator配合select2插件不能正常校验的问题
查看>>
【网新1】
查看>>
以前的随笔已移至日记
查看>>
android 使用style修饰内容
查看>>
面向对象程序设计第五次作业
查看>>
Mac入门教程之: Command键5个隐藏功能
查看>>
cp命令
查看>>
[C#]XML操作类
查看>>
计算机网络基础
查看>>
auto和100%的区别
查看>>
OpenCV中的神器Image Watch
查看>>
Oracle 获取本周、本月、本季、本年的第一天和最后一天(转载)
查看>>
动态规划入门
查看>>
Linux学习笔记:重定向>和>>
查看>>
webpack 代码分离
查看>>
PathFileHelper GZipFileHelper (Decompress)
查看>>
[树结构]有实际用途的树的计算公式
查看>>
解决Chrome账户不能登录无法同步书签问题
查看>>
客户端存在潜在危险request.from
查看>>
236. Lowest Common Ancestor of a Binary Tree
查看>>