如何使用JsonFormat格式化日期



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

首先,我理解了你关于从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);
}

最新更新