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中: