Springboot + mongodb 将字符串转换为日期

时间:2021-07-22 14:16:12

标签: string mongodb spring-boot date

我有以下请求,格式为“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 }, Fields :{},排序:{}

我想要的最终结果并且适用于查询是这样的:

 Query: { "date" : { "$gte" : { "$date" : "2021-07-22T03:00:00" }, "$lte" : { "$date" : "2021-07-23T03:00:00" } }, "isDeleted" : false }, Fields: { }, Sort: { }

有人可以帮我解析吗?

1 个答案:

答案 0 :(得分:0)

DateFormat#parse(String source) 实际上从 Date 生成一个 String 对象。 DateFormat#format(Date date) 应该用于将日期格式化为字符串表示形式。

parse 来自日期格式的 javadoc:

<块引用>

从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。

format 来自日期格式的 javadoc:

<块引用>

将日期格式化为日期/时间字符串。

我认为您需要将 Date 格式化为所需的格式(因此使用 format 方法)。

我没有看到您的请求类代码,而是一个想法:您可以将 dataSdataE 属性接收为 Date,而不是字符串。然后调用 DateFormat#format(Date date) 以将它们作为所需格式的字符串获取。

但在你走得太远之前,看看这个答案:

Spring data mongodb query converts String to ObjectId automatically

Jackson Mapper Serialize/Deserialize ObjectId

我猜这可以通过编写自己的 Jackson Serializer 来解决。