【问题标题】:Deserializing java date into Instant将 java 日期反序列化为 Instant
【发布时间】:2020-05-11 08:00:18
【问题描述】:

我需要在单个代码中将以下两个格式反序列化为java.time.Instant

2020-04-23T10:51:24.238+01:002019-11-11T15:44:10.201Z

我在第一种情况下遇到错误

嵌套异常是 org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法从字符串“2020-04-23T10:51:24.238+01:00”反序列化 java.time.Instant 类型的值:com.fasterxml。 jackson.databind.exc.InvalidFormatException:无法从字符串“2020-04-23T10:51:24.238+01:00”反序列化 java.time.Instant 类型的值:无法反序列化 java.time.Instant: (java.time.format. DateTimeParseException) 无法在索引 23 处解析文本“2020-04-23T10:51:24.238+01:00”

有什么解决办法吗? 还有有没有办法将java.util.Date反序列化为java.time.Instant 注意:它是一个 API 响应,我不能在反序列化类中使用 Date,即消费者

【问题讨论】:

  • 清除你的问题你想要什么给出一个示例输入输出并描述你的senerio
  • 你在使用任何反序列化器吗?
  • 不,它的简单休息客户端。 scnario 很简单,我得到以上两种格式之一作为响应,我想将其填充到Instant 变量中,而不更改名称/添加其他变量
  • 您正在从您的应用程序进行休息调用,响应有两种格式,您只想将字符串解析为 Instant 对吗?
  • class response { Instant date ; } ;看,这是我的响应类,我在其中以上述两种格式之一获取日期

标签: java serialization java-8 java-time date


【解决方案1】:

还有没有办法将java.util.Date反序列化为java.time.Instant

了解您的 API:

final java.util.Date date = new Date();
final java.time.Instant instant = date.toInstant();

【讨论】:

  • 不能使用java.util.Date 必须是java.time.Instant
  • 我只是引用了你的问题,也许你应该更正一下
【解决方案2】:
    String dateString = "2020-04-23T10:51:24.238+01:00";    

    Instant deserializedInstant = DateTimeFormatter.ISO_OFFSET_DATE_TIME
            .parse(dateString, Instant::from);
    System.out.println(deserializedInstant);

输出是:

2020-04-23T09:51:24.238Z

它也适用于您的其他字符串:

    String dateString = "2019-11-11T15:44:10.201Z";

2019-11-11T15:44:10.201Z

您的 JSON 库可能还有更优雅的解决方案。如果没有,您可能可以将上述内容包装在自定义 JSON 反序列化器中。

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多