Spring-boot: mongoDB 日期比较不工作

Spring-boot: mongoDB date comparison not working

我正在尝试获取特定日期的约会。

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

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

我也在spring boot.

中粘贴了这段代码形成的查询
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”。

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

或者您可以在 Java 中使用 Instant 8.

我已经展示了两个示例。

endDate 使用 dateFormatter 时区设置为 UTC

startDate 使用 Instant

类似

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");