问题描述
在SpringBoot项目中,接口难免会使用到日期类型,我的数据使用的是mysql,表中的日期字段类型为 datetime ,java实体类中对应的类型为Date类。结果发现返回给前端的时间不对。
从图片可以看出:
1、时间为 00:00:00 ,变成了前一天的 04:00:00;
2、时间为16:53:40 , 变成了当天的 08:53:40;
原因分析:
经过分析,貌似时间如果是12小时制的话,就与正确的时间相差8小时了,这刚好也是时区差。
所以这里有两个坑:
1、在yaml配置文件中,使用了spring.jackson.data-format 来进行日期类型的格式化;
# 这是一开始的写法,不小心把 小时 写成了hh,这是12小时制
spring:
jackson:
date-format: yyyy-MM-dd hh:mm:ss
2、就是时区问题,经过查阅自动配置类JacksonAutoConfiguration发现,如果没有配置时区的话,不会给时区赋值,默认就是null。
解决方案:
解决时间制以及时区问题,只需要对配置文件重新配置就可以解决问题。
#正确配置如下
spring:
jackson:
#24小时制
date-format: yyyy-MM-dd HH:mm:ss
#设置东八时区
time-zone: GMT+8
配置完成后重启项目,调用接口发现,时间已经可以正确获取了!