java/springboot/mysql时区问题解决方案

解决步骤:

先理清楚逻辑

数据从mysql查出-->进入docker(没容器化跳过)-->进入相应的应用程序(比如java或者框架springboot之类的)-->程序处理完输出返回给前端或者页面-->展示

第一步:先查mysql

所以先进入mysql控制台,select now(),时区没问题则这里显示的时间和当前中国时间一致,或者show variables like '%time_zone%';


image.png

如果时区不对可以设置

set global time_zone = '+8:00';
flush privileges;

不过重启会失效,想不失效可以改my.cnf然后重启mysql

第二步:进入docker容器看时区对不对(如果不是容器化跳过)

先用docker ps 查看容器id,拿到id 进去相应容器
命令为

docker exec -ti 7a542556a73a /bin/bash  

接下来在容器内查看当前时间是否和中国时间一致

date -R

如果不一致需要在Dockerfile时加上

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

第三步:应用程序时区

比如java代码中new出的date查看,如果不是中国时区,可以在Dockerfile中加上

ENV JAVA_OPTS $JAVA_OPTS -Duser.timezone=GMT+08

如果是框架的时区问题,那要查询对应框架的时区设置

比如springboot的时区设置如下

public class SpringBootApplication{
    public static void main(String[] args) {
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

除此之外,程序处理完后需要返回前端也有时区差异

springboot中需要在application.yml中设置

spring:
  jackson:
    time-zone: Asia/Shanghai

第四步:至此后台时区一致,前端展示基本不会有问题,不多叙述

欢迎大家加入Java技术群


1544106895022.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,710评论 15 147
  • Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启...
    执笔梦一场阅读 8,685评论 2 10
  • 昨晚看了一篇关乎健康的文章,认真看了一遍又一遍,心中百感交集。 不知从什么时候开始,时不时听到身边有声音讨论着谁谁...
    蜡七阅读 4,946评论 0 1
  • 太好了, 又出去溜达 拿钱买票 琳琅满目的商品,眼花缭乱 给家人烧一柱香, 祝外公外婆,爸爸妈妈身体健康, 祝哥哥...
    译丹Sunshine阅读 1,540评论 0 2
  • 晚安梦贞VOL16 文/马贝 你就像夜晚的温柔月光 一次次出现在我的梦境中 听阿 有人敲响魂的丧钟 梦的使者又将你...
    阿伦贝阅读 1,768评论 0 6