一直没太搞清楚spring 集成mongo Date 是怎么处理的,今晚研究了一下,算是搞清楚了。
1, java new Date 的时候,默认是 当前时区,如当前时区是东八区。
2, spring通过mongoRepository 保存到mongoDB的时候, 会把东八区变为GMT时间, 也就是减去8个小时进行保存。
如果new Date 的时间是 2014-02-14 20:00:00, 保存到mongo的时间是: 2014-02-14 12:00:00, 通过mongoVue 和 mongo shell 查看都是这个时间。
3, spring 中通过Query 进行查询时, spring 通过Query 进行查询时, 返回的也是GMT时间: 2014-02-14 12:00:00
然后通过 converter 转化为对象时, 时区转为东八区时间: 2014-02-14 20:00:00.
4, 查询条件的组织是:
用东八区时间进行作为查询条件传给 Query, driver 会转为 GMT 时间进行查询。
结论: 保存 数据的原始时间即可,不需要转换时间为字符串。
代码: 时间转为东八区时间:
Date date = DateUtil.convertStringToDateTime("2014-02-10 20:38:44");
Date date2 = DateUtil.convertStringToDateTime("2014