MongoDB 集成Spring 的时间研究

来源:互联网 发布:凤凰卫视知乎2016 编辑:程序博客网 时间:2024/06/05 03:16

一直没太搞清楚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-02-10 20:38:50");logger.info( "date is " + date.getTime() );List<Course> result = this.repo.findTest(date, date2);


日期查询

public List<Course> findTest(Date date, Date date2) {Query query = new Query();Criteria criteria = Criteria.where("delflag").is(false);criteria.and("modifyDate").gte(date).lte(date2);query.addCriteria(criteria);query.limit(10);return this.mongoTemplate.find(query, Course.class);}



0 0
原创粉丝点击