java获取系统时间和mysql数据库时间相差14小时

问题现象

java应用程序获取当前时间new Date() 存储数据库时,和系统时间相差14小时。

问题分析

1、登录服务器查看服务器时间和时区

date -R

发现服务器系统时间时区正常。

2、查看应用默认设置的时区
我们系统采用的时spring boot,设置默认时间配置。此步骤也没问题。

spring.jackson.time-zone=GMT+8

3、查看mysql时区设置

show variables like '%time_zone%';

±-----------------±-------+
| Variable_name | Value |
±-----------------±-------+
| system_time_zone | CST |
| time_zone | SYSTEM |
±-----------------±-------+
而mysql time_zone为SYSTEM时,会取 system_time_zone值作为协调时区。

CST 的时区是一个很混乱的时区,有四种含义:
1、美国中部时间 Central Standard Time (USA) UTC-06:00
2、澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
3、中国标准时 China Standard Time UTC+08:00
4、古巴标准时 Cuba Standard Time UTC-04:00

今天是“1月13日”。美国从“3月11日”至“11月7日”实行夏令时,11月8号至次年3月11日实行冬令时,美国中部时间改为 UTC-05:00,与 UTC+08:00 相差 13 小时。而冬令时 UTC-06:00则会相差14个小时。

解决方案

1、设置mysql时区
(1)通过修改my.cnf,需要重启mysql

default-time-zone = '+8:00'

(2)通过命令行在线修改

set time_zone = '+8:00';

2、设置连接mysql url时区参数

jdbc:mysql://localhost:3306/table_name?useTimezone=true&serverTimezone=GMT%2B8
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值