问题描述

在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

配置完成后重启项目,调用接口发现,时间已经可以正确获取了!

在这里插入图片描述

更多推荐