【问题标题】:How to format date using JsonFormat如何使用 JsonFormat 格式化日期
【发布时间】:2021-05-14 08:24:02
【问题描述】:

我想使用@JsonFormat 格式化数据并排除纳秒。

       [{ "createtime": "2021-02-08 16:44:41.336475",  "orderdate": "2021-02-03 22:55:54.764" }, { "createtime": "2021-02-08 16:44:41.3365",  "orderdate": "2021-02-03 22:55:54.4" }]
         

纳秒的位数不固定。下面是我写的代码

 @JsonProperty("createtime")
 @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS")
 private LocalDateTime createTime;

@JsonProperty("orderdate")
@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss.SSS")
private LocalDateTime orderDate;

当“createtime”:“2021-02-08 15:14:41.33675”时,我无法反序列化 java.time.LocalDateTime。 请告诉我如何以 yyyy-MM-dd HH:mm:ss 格式格式化日期。 提前致谢

【问题讨论】:

  • 你的代码现在产生了什么?
  • 已编辑问题,请检查!如果创建时间是 2021-02-08 16:44:41.33647 那么我将无法反序列化 java.time.LocalDateTime: (java.time.format.DateTimeParseException)

标签: java jackson jackson2


【解决方案1】:

首先,正如我理解您关于从 json 到 java LocalDateTime 属性的反序列化的问题。对于这种情况,您可以使用以下内容:

private class Timed {

        private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");

        @JsonIgnore
        private LocalDateTime createTime = LocalDateTime.now();

        public LocalDateTime getCreateTime() {
            return createTime;
        }

        public void setCreateTime(LocalDateTime createTime) {
            this.createTime = createTime;
        }

        @JsonProperty("createtime")
        public String createTime() {
            return formatter.format(createTime);
        }

        @JsonCreator
        public void setCreateTime(@JsonProperty("createtime") String property) {
            createTime = LocalDateTime.parse(json, formatter).truncatedTo(ChronoUnit.SECONDS);
        }

        @Override
        public String toString() {
            return "Timed{" +
                    "createTime=" + createTime +
                    '}';
        }
    }

更新: 你完全可以摆脱纳秒:

  private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

  @JsonCreator
  public void setCreateTime(@JsonProperty("createtime") String property){
        String withoutNanos = property.split("\\.")[0];
        createTime = LocalDateTime.parse(withoutNanos, formatter);
  }

【讨论】:

  • 如果纳秒的位数也没有变化,这会起作用吗?我的意思是如果创建时间是 2021-02-08 16:44:41.33647 那么它也可以工作吗?
  • 是的。您可以更改和使用任何您想要的格式。 String withoutNanos = property.split("\\.")[0]; createTime = LocalDateTime.parse(withoutNanos, formatter).truncatedTo(ChronoUnit.SECONDS);
猜你喜欢
  • 2021-10-22
  • 2014-07-31
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2011-10-06
相关资源
最近更新 更多