如何使用 JsonFormat 格式化日期

问题描述 投票:0回答:1

我想使用 @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 格式。 预先感谢

java jackson jackson2
1个回答
0
投票

首先,关于将 JSON 数据反序列化为 Java

LocalDateTime
属性的问题,您可以使用以下方法:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.