2017-10-10 137 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");