Spring Hibernate中@JsonFormat设Asia/Kolkata时区12pm转00am问题
问题根源
你遇到的转换错误是时间格式Pattern的小时标识符使用错误导致的:@JsonFormat注解中你使用的hh是12小时制的小时标识符,取值范围是1-12,在没有配置上下午标识的情况下,12点会被默认识别为0点,就会出现你遇到的12:30被转成00:30的问题。
解决方案
方案1:切换为24小时制格式(最常用)
把Pattern里的hh替换为HH,HH是24小时制的小时标识符,取值范围0-23,不需要上下午标识就能正确解析。
修改后的注解代码如下:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss", timezone = "Asia/Kolkata") private Timestamp startDateTime;
方案2:保留12小时制+补充上下午标识
如果你的业务确实需要使用12小时制的时间格式,需要在Pattern里加上a用来匹配上下午标识(AM/PM),同时要求入参的时间字符串带上对应的上下午标识,比如25-10-2021 12:30:00 PM。
修改后的注解代码如下:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss a", timezone = "Asia/Kolkata") private Timestamp startDateTime;
注意事项
- 确认你接收的入参时间格式和Pattern完全匹配,避免出现解析异常
- 时区配置要和入参时间的所属时区保持一致,避免出现时差问题
内容的提问来源于stack exchange,提问作者James007
相关产品推荐
相关产品推荐

