还在为时区问题发愁?获取的时间与中国时间差八小时怎么办?史上最全的解决方案总结

1.修改mysql时区

查看时区:

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone |        |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set, 1 warning (0.00 sec)

MySQL 的时区默认与系统时区一致。

配置 MySQL 默认时区

MySQL使用的time_zone属性是UTC时间即:+00:00,而北京时间比UTC时间早8小时,即:UTC+08:00

永久修改

vi /etc/my.cnf

在 [mysqld] 下面添加一行:default-time_zone = '+8:00'

重启 MySQL 生效:systemctl restart mysqld

临时修改

mysql> set time_zone =+8:00;
mysql> set global time_zone =+8:00;

优点:立即生效,不用重启 MySQL

缺点:重启 MySQL 后会失效

配置默认时区后

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | +08:00 |
+------------------+--------+
2 rows in set (0.03 sec)

mysql> select @@global.time_zone,@@session.time_zone,@@global.system_time_zone;
+--------------------+---------------------+---------------------------+
| @@global.time_zone | @@session.time_zone | @@global.system_time_zone |
+--------------------+---------------------+---------------------------+
| +08:00             | +08:00              | CST                       |
+--------------------+---------------------+---------------------------+
1 row in set (0.00 sec)

2.修改服务器系统时区

查看服务器时区

cat /etc/timezone  #这里的时区是亚洲上海
Asia/Shanghai

如果你的服务器不是亚洲上海的时区,需要对其进行修改

timedatectl set-timezone "Asia/Shanghai"

3.修改docker容器时区

#根据容器名查询容器ID
containerId=`docker ps -a | grep -w ${project_name}:${tag} | awk '{print $1}'`
#复制服务器系统时区到容器内 容器时区改用服务器系统时区
docker cp /usr/share/zoneinfo/Asia/Shanghai ${containerId}:/etc/localtime

4.在JAVA服务代码中更改时区

/**
 * @Author liuy
 * @Description 服务器时区调整util
 * @Date 2022/4/7 11:02
 * @Version 1.0
 */
@Component
public class TimeZoneUtil {
    @PostConstruct
    void started() {
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
    }
}

5.在与数据库连接配置文件中配置上海的时区

url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai

如果单一的方法无效可以结合以上五种方法可使用**

猜你喜欢

转载自blog.csdn.net/weixin_42469135/article/details/124351223