您当前的位置: 首页 >  学无止境 >  文章详情

解决年份为1986~1991时,使用注解@JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")仍然比实际日期少一天

时间: 2024-10-29 【学无止境】 阅读量:共53人围观

简介 记录一下项目中遇到的诡异的问题: 今天有用户反映web系统中,某些人口数据的生日更新之后一直退一天,比如说生日是1987-05-04,编辑保存之后显示1987-05-03,之前也有遇到类似的问题,是时区问题造成的,在加上@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")之后就可以了。这次的问题就有点诡异了,因为试了其他数据,基本上都不会出现这个问题。没办法只能用排除法了,首先将出现问题的人员生日改成上面保存成功的生日数据:2000-05-01,保存之后发现不会出现退一天的情况,此时排除特定人员数据问题,考虑特定日期问题,通过测试发现,区间在1987-1991的年份日期保存后都会出现退一天的问题(此处有误,测试时刚好选的都是5-8月的日期),将这特定年份上百度查了之后,终于发现原因,夏令时!

alt

这样的话问题就明了了,在实行夏时制期间出生者,其实际出生时间应为当时的出生时间须减去1小时,比方说夏令时公历1991年5月2日0点10分出生,转换为北京时间为1991年5月1日23点10出生。@JsonFormat包含了处理夏令时的问题。

问题原因:

中国在1986年至1991年实行过夏令时,即在这些年份北京时间比GMT提前9个小时。所以使用注解@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")看起来像是未起作用。

解决方案:

// 使用下面的注解替换@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", locale = "zh", timezone = "Asia/Shanghai")
文章评论
总共 0 条评论
这篇文章还没有收到评论,赶紧来抢沙发吧~
Copyright (C) 2023- 小祥驿站 保留所有权利 蜀ICP备 17034318号-2  公安备案号 50010302004554