java 日期数据前端比数据库少一天问题

记录一下项目中遇到的诡异的问题:

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

 

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

那这问题要怎么解决呢?百度有人说在get方法中添加

TimeZone.setDefault(TimeZone.getTimeZone("GMT+08")); 

可以解决,我尝试了下,果然可以。最后把这段移到项目自定义的ObjectMapper中:

 

posted @ 2020-11-03 12:05  葱香排骨面  阅读(2452)  评论(0编辑  收藏  举报