我有以下请求,格式为“yyyy-MM-dd'T'hh:mm:ss”的两串日期
{
"dataS": "2021-07-22T03:00:00Z",
"dataE": "2021-07-23T03:00:00Z",
}
我需要将此值转换为日期格式以构建以下查询
Query query = new Query();
query.addCriteria(Criteria.where("date").gte(dataS).lte(dataE));
MongoDB 中“日期”字段的格式是 ISODate 如下: { "date" : ISODate("2019-04-13T03:00:00.000+0000")}
我尝试了两种方法
使用字符串值,我有以下查询。此查询不起作用。
查询:{ "date" : { "$gte" : "2021-07-22T03:00:00" , "$lte" :"2021-07-23T03:00:00"}, "isDeleted" : false },字段:{},排序:{}
将String转换为Data格式,如下我只得到TimeStamp
DateFormat originalFormatData = new SimpleDateFormat( "yyyy-MM-dd'T'hh:mm:ss", Locale.ENGLISH); query.addCriteria(Criteria.where("date").gte(originalFormatData.parse(dataS)).lte(originalFormatData.parse(dataE)));
结果:查询:{ "date" : { "$gte" : { "$date" : 1626933600000 }, "$lte" : { "$date" : 1627019999000 } }, "isDeleted" : false }, Fields :{},排序:{}
我想要的最终结果并且适用于查询是这样的:
Query: { "date" : { "$gte" : { "$date" : "2021-07-22T03:00:00" }, "$lte" : { "$date" : "2021-07-23T03:00:00" } }, "isDeleted" : false }, Fields: { }, Sort: { }
有人可以帮我解析吗?
答案 0 :(得分:0)
DateFormat#parse(String source)
实际上从 Date
生成一个 String
对象。 DateFormat#format(Date date)
应该用于将日期格式化为字符串表示形式。
parse
来自日期格式的 javadoc:
从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。
format
来自日期格式的 javadoc:
将日期格式化为日期/时间字符串。
我认为您需要将 Date
格式化为所需的格式(因此使用 format
方法)。
我没有看到您的请求类代码,而是一个想法:您可以将 dataS
和 dataE
属性接收为 Date
,而不是字符串。然后调用 DateFormat#format(Date date)
以将它们作为所需格式的字符串获取。
但在你走得太远之前,看看这个答案:
Spring data mongodb query converts String to ObjectId automatically
Jackson Mapper Serialize/Deserialize ObjectId
我猜这可以通过编写自己的 Jackson Serializer 来解决。