为何FasterXML中@JsonFormat的YYYY-MM-dd模式将日期序列化为2024-12-31?
问题说明
数据库中某日期字段值为:
2023-12-31 23:59:59.907
使用FasterXML Jackson进行JSON序列化时,代码配置如下:
/** * Tariff end */ @JsonFormat(pattern = "YYYY-MM-dd") @ApiModelProperty(notes = "tariff end date") private Date endDate;
最终序列化结果为2024-12-31,而非预期的2023-12-31,请说明原因及解决办法。
原因分析
问题出在日期格式符的使用上:
YYYY代表周年(Week Year),即当前日期所在周对应的年份。2023年12月31日在ISO周历规则下属于2024年的第一周,因此Jackson会将其映射为2024年。- 我们实际需要的是公历年,对应的格式符是小写的
yyyy。
解决办法
修改@JsonFormat注解的格式参数,将YYYY替换为yyyy:
/** * Tariff end */ @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(notes = "tariff end date") private Date endDate;
修改后重新序列化,即可得到正确的2023-12-31。
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

