【问题标题】:Deserializer String data time using Jackson使用杰克逊的反序列化器字符串数据时间
【发布时间】:2021-06-28 21:58:14
【问题描述】:

我正在尝试使用这样的注释反序列化以下日期时间字符串 '6/18/2021 5:25:57 PM'

@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss")
@JsonProperty("DateModified") 
private LocalDateTime dateModified;

  {
    "XXXX": "....",
    "XXXX1": "....",
    "DateModified": "6/18/2021 5:25:57 PM",

但收到以下错误消息:

com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type 
`java.time.LocalDateTime` from String "6/18/2021 5:25:57 PM": Failed to deserialize 
java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '6/18/2021 5:25:57 PM' could not be parsed at index 0

知道我错过了什么吗?

谢谢

【问题讨论】:

  • @JsonFormat.pattern 使用 -,而 json 日期使用 /
  • 我确实尝试过。同样的错误。过去它曾经可以工作我不确定问题是否来自文件。

标签: java spring-boot jackson


【解决方案1】:

问题在于您的"dd-MM-yyyy HH:mm:ss" 格式,您的"6/18/2021 5:25:57 PM" 结果无效,因此您必须对其进行三处更改才能解析您的字符串日期:

  1. - 更改为/
  2. 您将日期与月份交换,因为 18 肯定是一个月中的某一天,因此您的模式应该以 M/dd/yyyy 而不是 dd-MM-yyyy 开头。
  3. 您的小时数是从 1 到 12,因为存在 PM,所以您必须使用 h 而不是 H 小时数,并在您的模式末尾添加 a AM/PM 案例.

所以"6/18/2021 5:25:57 PM" 字符串日期的一种有效模式是"M/dd/yyyy h:mm:ss a" 模式,您可以查看DateTimeFormatter 页面以获得更详细的说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2023-03-04
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多