gpt4 book ai didi

java - Jackson JsonParser 将 DateTime 月份偏移 -1

转载 作者:行者123 更新时间:2023-12-01 18:43:21 25 4
gpt4 key购买 nike

我的应用程序应该通过 HTTP 请求接收 JSON 消息,并且我正在使用自定义反序列化器来映射某些类的 LocalDateTime 属性。但是,当我通过 JsonParser 收到信息时,月份偏移了 -1。

例如发送的消息为:“2020-10-12T10:20:00.000Z”,JsonParser 内的消息为:“2020-09-12T10:20:00.000Z”。

我正在使用 Jackson 2.9.6 和 SpringBoot 2.1.3。您知道这可能是什么原因吗?

@Override
public LocalDate deserialize(final JsonParser p, final DeserializationContext ctxt)
throws IOException {
final String date = p.readValueAs(String.class);
if (date == null) {
return null;
}

try {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
ZonedDateTime dateToParse = ZonedDateTime.parse(date, DateTimeFormatter.ISO_DATE_TIME);
return dateToParse.toLocalDate();
} catch (final DateTimeParseException ex) {
LOGGER.error(ex.getMessage());
return null;
}
}

我的问题是“final String date = p.readValueAs(String.class)”。 p 包含接收到的值,其月份偏移 -1。

最佳答案

通过执行以下操作来修复日期偏移:

// "2020-00-01'T'12:00:00.00'0'"
String date = p.readValueAs(String.class);
int month = Integer.parseInt(date.substring(5, 7)) + 1;
date = date.substring(0, 5) + (month < 10 ? "0" : "") + month + date.substring(7);

您没有使用正在创建的 DateTimeFormatter,而是使用 ISO_DATE_TIME 常量。

尝试使用您正在创建的:

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
ZonedDateTime dateToParse = ZonedDateTime.parse(date, df);

关于java - Jackson JsonParser 将 DateTime 月份偏移 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59878725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com