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 方法)。

我没有看到您的请求类代码,而是一个想法:您可以将dataSdataE 属性接收为Dates,而不是字符串。然后调用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

Springboot整合MongoDB的Docker开发,其它应用也类似

springboot Spring Data MongoDB 操作 mongodb

无法将 Spring Boot 与 MongoDb 连接

springboot 整合 mongodb实现 批量更新数据

此客户端所连接的 MongoDB 集群不支持会话-springboot-mongodb-transactions