春季引导:mongoDB日期比较不起作用
问题描述:
我想获取特定日期的约会。春季引导:mongoDB日期比较不起作用
所以我通过fromDate
和toDate
找到该日期范围内的数据。
这是我的代码,其中查询方法正在改变传递给它的实际日期。
我也粘贴了这个代码在弹簧启动形成的查询。
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 8
使用Instant
我已经展示了两个例子。
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");