java/springboot/mysql時區問題解決方案

解決步驟:

先理清楚邏輯

數據從mysql查出-->進入docker(沒容器化跳過)-->進入相應的應用程序(好比java或者框架springboot之類的)-->程序處理完輸出返回給前端或者頁面-->展現前端

第一步:先查mysql

因此先進入mysql控制檯,select now(),時區沒問題則這裏顯示的時間和當前中國時間一致,或者show variables like '%time_zone%';java

 

image.pngmysql

若是時區不對能夠設置spring

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

不太重啓會失效,想不失效能夠改my.cnf而後重啓mysqlsql

第二步:進入docker容器看時區對不對(若是不是容器化跳過)

先用docker ps 查看容器id,拿到id 進去相應容器
命令爲docker

docker exec -ti 7a542556a73a /bin/bash

接下來在容器內查看當前時間是否和中國時間一致springboot

date -R

若是不一致須要在Dockerfile時加上bash

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

第三步:應用程序時區

好比java代碼中new出的date查看,若是不是中國時區,能夠在Dockerfile中加上app

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

做者:詩錯亦染瑾 連接:https://www.jianshu.com/p/7f83f6ab58e4 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

相關文章
相關標籤/搜索