最近在做项目时发现,在无论在java应用中使用 java.util.Date还是使用 java.time.LocalDateTime类,获取的当前时间保存到数据库中后,数据库中的时间跟应用中获取的时间相差 8个小时。
一、排查过程
首先查看数据库和java应用的时区设置,发现时区都没为题,都为东八区。
困惑了好久 再一次配置 数据库连接池时发现,配置的JDBC连接路径中多了 “serverTimezone=UTC”,参数,去除此参数后
重启再次保存时间 java应用和数据库中的时间一致了。
二、设置数据库的时区
1、首先查看数据库配置的时区
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
如果 system_time_zone 为 CST 表示此时数据库中设置的时区非东八区。
2、修改方式
2.1、命令行之行
mysql> set global time_zone = '+08:00';
Query OK, 0 rows affected (0.00 sec)
mysql> set time_zone = '+08:00';
Query OK, 0 rows affected (0.00 sec)
2.2、修改配置文件
在配置文件 my.conf 或 my.ini中添加 default-time-zone = '+08:00'。
重启数据库