SpringBoot时区问题解决,彻底解决时差问题
第一步:确认docker时区
进入容器中
docker exec -it 容器name bash
查看容器时区:
date
第二步确认数据库时区
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
如果显示的是08:00:00则是cst时区。
如果不是cst时区,则执行Sql:
set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区
set time_zone = '+8:00'; ##修改当前会话时区
flush privileges; #立即生效
第三步确认数据库连接版本是否是6及版本以上
如果是6及以上版本,则数据连接需要加上时区
jdbc:mysql://192.168.1.54:3306/......&serverTimezone=Asia/Shanghai
第四步:确认SpringBoot的时区
如果不是cst时区,则在启动文件中加上:
@SpringBootApplication
public class ApplyPartyApplication {
public static void main(String[] args) {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
SpringApplication.run(ApplyPartyApplication.class, args);
}
}
第五步:确认json化输出前端的时区
此时数据库时区、容器时区、springboot时区都是CST,输出的时间还是可能差8小时,这因为Date进行json的时候还存一个时区,而springboot默认json工具是jackson,采用的是UTC时区。需要一下配置。
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
还没有评论,来说两句吧...