2017-10-10 103 views
0

我想获取特定日期的约会。春季引导:mongoDB日期比较不起作用

所以我通过fromDatetoDate找到该日期范围内的数据。

这是我的代码,其中查询方法正在改变传递给它的实际日期。

我也粘贴了这个代码在弹簧启动形成的查询。

DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS\'Z\'"); 

fromDate = "2017-10-06T00:00:00.000Z"; 
toDate = "2017-10-07T23:00:00.000Z";   

Date startDate,endDate; 

startDate = dateFormatter.parse(fromDate); 
endDate = dateFormatter.parse(toDate); 

System.out.println(startDate); 
System.out.println(endDate); 

Query q = new Query().addCriteria(new Criteria().orOperator(
      new Criteria().andOperator(Criteria.where("fromDate").gte(startDate), 
      Criteria.where("fromDate").lte(endDate)), 
      new Criteria().andOperator(Criteria.where("toDate").gte(startDate), 
      Criteria.where("toDate").lte(endDate)) 
     )); 

System.out.println(startDate); 
System.out.println(endDate); 

System.out.println(q); //here in query m getting different date 

List<Appointment> result= mongoTemplate.find(q, Appointment.class); 

System.out.println(result); 

当我试图打印查询,它打印以下JSON这是错误的:

{ 
    "$or": [ 
     { 
      "$and": [ 
       { 
        "fromDate": { 
         "$gte": { 
          "$date": "2017-10-05T18:30:00.000Z" //expected date 2017-10-06 
         } 
        } 
       }, 
       { 
        "fromDate": { 
         "$lte": { 
          "$date": "2017-10-07T17:30:00.000Z" 
         } 
        } 
       } 
      ] 
     }, 
     { 
      "$and": [ 
       { 
        "toDate": { 
         "$gte": { 
          "$date": "2017-10-05T18:30:00.000Z" 
         } 
        } 
       }, 
       { 
        "toDate": { 
         "$lte": { 
          "$date": "2017-10-07T17:30:00.000Z" 
         } 
        } 
       } 
      ] 
     } 
    ] 
} 

我的预产期是 “2017-10-06T00:00:00.000Z” 和“2017年-10-07T23:00:00.000Z”。

回答

0

使用DateFormat解析字符串日期时,必须将时区设置为UTC。

或者你可以在Java 8

使用Instant我已经展示了两个例子。

endDate使用dateFormatter与时区设置为使用UTC

startDateInstant

喜欢的东西

DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS\'Z\'"); 
dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); 

Date startDate,endDate; 

startDate = Date.from(Instant.parse("2017-10-06T00:00:00.000Z")); 
endDate = dateFormatter.parse("2017-10-07T23:00:00.000Z");