Spring-boot: mongoDB 日期比较不工作
Spring-boot: mongoDB date comparison not working
我正在尝试获取特定日期的约会。
所以我通过 fromDate
和 toDate
来查找该日期范围内的数据。
这是我的代码,其中查询方法正在更改传递给它的实际日期。
我也在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");
我正在尝试获取特定日期的约会。
所以我通过 fromDate
和 toDate
来查找该日期范围内的数据。
这是我的代码,其中查询方法正在更改传递给它的实际日期。
我也在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");