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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 还在为时区问题发愁?获取的时间与中国时间差八小时怎么办?史上最全的解决方案总结

正文


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


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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java 云计算
阿里云国际站代理商:Java计算当前时间处于某段时间内的第几周、第几个月
@luotuoemo飞机@TG阿里云国际站代理商:Java计算当前时间处于某段时间内的第几周、第几个月,以上就是使用Java代码计算当前时间处于某段时间内的第几周和第几个月的全部内容。通过该篇文章,我们可以了解到如何使用Java的Calendar类以及日期函数来计算时间段内的周数和月数,掌握相应的计算方法和实践技巧。在开发过程中,合理运用这些方法,可以方便地获取时间相关的信息,满足业务需求,提高开发效率。希望本文能对读者在使用阿里云国际站代理商开发Java应用时计算时间段的周数和月数提供一些帮助与启示。
将字符串转为时间晚了5天,避坑指南
将字符串转为时间晚了5天,避坑指南
61 1
|
存储 前端开发 数据库
闲谈时间
闲谈时间
66 0
|
前端开发
前端工作总结272-时间戳处理
前端工作总结272-时间戳处理
94 0
|
缓存 安全 算法
月光宝盒-未来时间可测性解决方案
阿里QA导读:火箭发射、奥运会开幕式、双十一0点大促(或视频、OTA等网站的关键营销活动),面临这些极其重要的时刻,负责人总是会想法设法保证稳定,最理想情况是可以真实模拟演练。众所周知,发射和开幕式无法模拟或者成本很高,但在软件领域这却成为可能,阿里巴巴技术质量的星斩、靖北、晟枫、成章同学为我们带来“安全、便捷、0入侵的未来可测解决方案”。
754 0
月光宝盒-未来时间可测性解决方案
从哪里为业余项目挤出时间?
发布于 2014-02-21 自从公布了业余项目(side-project)的收入,我收到了很多次这个问题:“你真的有4个孩子和一份全职工作吗?!你从哪儿为业余项目挤出时间的?” 回答时,我想编造一些听起来非常令人印象深刻的回答:“嗯,我每晚熬夜,拼命奋斗到眼睛充血。” 但我没有那样做。目前我也没有使用非常复杂的时间管理哲学。这里有一些我马上要做的已经使我受益的事情。如果你像我一样(为人父母 并且/或 有一份全职工作),那么这些事也许也会对你有帮助:
111 0
从哪里为业余项目挤出时间?
|
关系型数据库 应用服务中间件 PHP
记一次8小时惊心动魄的服务器+网站升级
2017年3月26日,此时此刻,我对服务器+网站进行了升级,也不知道自己脑袋那根弦短路了,大好的周末居然玩起了升级。 因为long long ago之前用的某宝的镜像环境,某段时间由于某种原因下架了。
10051 5
|
存储 关系型数据库 MySQL
关于时区问题的来龙去脉
国际化的业务场景中经常会遇到时区转换的问题,处理不好就会产生各种各样的问题。本文详细介绍了时区问题产生的原因和常用解决方案
2441 0