在工作过程中,有时候发现出现各种各样的时间相差8个小时的问题,汇总,解释原因以及给出解决方案!

相差8个小时根源:我们中国在东八区,也就是UTC+8,和UTC差了8个小时。

情况一 : 数据库时间是对的,返回到页面中时间不对,相差8个小时
Spring boot @ResponseBody转换JSON 时 Date 时间相差8小时v2-7911287dcd97de1c275c4fcd9719d009_r.png

0230321162725.png

数据库和postman相差8个小时,debug后发现是jackson得问题。

解决方案如下:
#application.yml文件配置
spring:
    jackson:
        time-zone: GMT+8
 
或者这样也可以解决,在你的时间上设置时间格式化。
 
public class Vo {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date createTime;
}

情况二:mysql从数据库查询的时间与实际时间相差8小时

解决方案:
设置spring配置文件:

一解决办法:

1、spring.datasource.url=jdbc:mysql://10.35.105.25:3306/database?characterEncoding=utf-8&serverTimezone=GMT%2B8

数据库配置后面加上&serverTimezone=GMT%2B8

2、spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

spring.jackson.time-zone=GMT+8

3、
#application.yml文件配置
spring:
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss

注意:
url: jdbc:mysql://localhost:3306/XXX?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8&rewriteBatchedStatements=true(区间在1986~1991可能因为有夏令时会造成一小时差)
url: jdbc:mysql://localhost:3306/XXX?characterEncoding=utf8&useSSL=false&serverTimezone=CTT&rewriteBatchedStatements=true(推荐使用)

情况三: 向mysql的create_time字段赋值,根据当前时间戳更新,currentTime..,发现入库后,时间相差8个小时,或者12个小时。


这个问题是mysql服务器的时区没有配置对
在mysqld的配置下添加如下
default-time-zone='+8:00'
然后重启mysql,搞定!
--查看
mysql> show global variables like '%time%zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | +08:00 |
+------------------+--------+
2 rows in set (0.00 sec)

注意在实际过程中,也要考虑是不是应用服务器的时间问题,echo $(date "+%Y-%m-%d %H:%M:%S")