Springboot + mongodb 将字符串转换为日期
Posted
技术标签:
【中文标题】Springboot + mongodb 将字符串转换为日期【英文标题】:Springboot + mongodb convert String to Date 【发布时间】:2021-09-29 19:56:04 【问题描述】:我有以下请求,格式为“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 , 字段: ,排序:
我想要的最终结果并且适用于查询:
Query: "date" : "$gte" : "$date" : "2021-07-22T03:00:00" , "$lte" : "$date" : "2021-07-23T03:00:00" , "isDeleted" : false , Fields: , Sort:
有人可以帮我解析吗?
【问题讨论】:
【参考方案1】:DateFormat#parse(String source)
实际上从String
生成一个Date
对象。 DateFormat#format(Date date)
应该用于将日期格式化为字符串表示形式。
parse
来自日期格式的 javadoc:
从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。
format
来自日期格式的 javadoc:
将日期格式化为日期/时间字符串。
我认为您需要将Date
格式化为所需的格式(因此使用format
方法)。
我没有看到您的请求类代码,而是一个想法:您可以将dataS
和dataE
属性接收为Date
s,而不是字符串。然后调用DateFormat#format(Date date)
以获取所需格式的字符串。
但在你走得太远之前,先看看这个答案:
Spring data mongodb query converts String to ObjectId automatically
Jackson Mapper Serialize/Deserialize ObjectId
我猜这可以通过编写自己的 Jackson Serializer 来解决。
【讨论】:
谢谢,我不知道发生了什么,但现在只能使用 Date 类的 parse 方法以上是关于Springboot + mongodb 将字符串转换为日期的主要内容,如果未能解决你的问题,请参考以下文章
Springboot整合MongoDB的Docker开发,其它应用也类似
springboot Spring Data MongoDB 操作 mongodb