本地项目发布到oracle云上后,发现时间不对,差8个小时。
首先查看服务器的时区
[opc@instance-20200525-2350 ~]$ date -R
Thu, 13 Aug 2020 03:39:22 +0000
显示的不是东8区,那么我们需要时间为东八区,例如
[root@kunfind ~]# date -R
Thu, 13 Aug 2020 11:16:05 +0800
第一步,调整服务器的时区 centos7
#timedatectl 首先查看时区
[opc@instance-20200525-2350 ~]$ timedatectl
Local time: Thu 2020-08-13 03:43:18 GMT
Universal time: Thu 2020-08-13 03:43:18 UTC
RTC time: Thu 2020-08-13 03:43:18
Time zone: GMT (GMT, +0000)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
#timedatectl set-local-rtc 1 将硬件时钟设置为本地时区
#timedatectl set-timezone Asia/Shanghai 设置为上海时区
这时候执行#data -R 显示时区正常
[opc@instance-20200526-1036-qy ~]$ date -R
Thu, 13 Aug 2020 11:47:21 +0800
第二步 调整数据库的时区 : 也改为东八区时区
当我们发现服务器时区调整好以后,数据库执行 select NOW() 时间是正确的,可是数据库执行查询时间不对
这时候修改mysql 时区
修改 /etc/my.inf 在 【mysqld】下面加入
default-time-zone = '+8:00'
重启mysql服务 service mysqld restart
第三步 应用程序连接JDBC URL需要调整
MySQL 8.0 以上的版本连接时都需要在url
后面加 serverTimezone 参数,
serverTimezone=Asia/Shanghai
因为我们统一用上海时区,那么这个地方修改成
jdbc:mysql://xx.xx.xx.xx/MES002?serverTimezone=Asia/Shanghai&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
最好保证服务器时区,数据库时区,以及JDBC配置指定时区 保持一致,不然就会出现相差8个小时、13个小时的问题