【问题标题】:Springboot + mongodb convert String to DateSpringboot + mongodb 将字符串转换为日期
【发布时间】: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")}

我尝试了两种方法

  1. 使用字符串值,我有以下查询。此查询不起作用。

    查询: { "date" : { "$gte" : "2021-07-22T03:00:00" , "$lte" :"2021-07-23T03:00:00"}, "isDeleted" : false },字段:{ },排序:{ }

  2. 将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: { }

有人可以帮我解析吗?

【问题讨论】:

    标签: string mongodb spring-boot date


    【解决方案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 方法
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2020-07-24
    • 2015-04-27
    • 1970-01-01
    • 2011-11-28
    • 2020-02-05
    相关资源
    最近更新 更多