解決步驟:
先理清楚邏輯
數(shù)據(jù)從mysql查出-->進(jìn)入docker(沒容器化跳過)-->進(jìn)入相應(yīng)的應(yīng)用程序(比如java或者框架springboot之類的)-->程序處理完輸出返回給前端或者頁(yè)面-->展示
第一步:先查mysql
所以先進(jìn)入mysql控制臺(tái),select now(),時(shí)區(qū)沒問題則這里顯示的時(shí)間和當(dāng)前中國(guó)時(shí)間一致放航,或者show variables like '%time_zone%';
image.png
如果時(shí)區(qū)不對(duì)可以設(shè)置
set global time_zone = '+8:00';
flush privileges;
不過重啟會(huì)失效云矫,想不失效可以改my.cnf然后重啟mysql
第二步:進(jìn)入docker容器看時(shí)區(qū)對(duì)不對(duì)(如果不是容器化跳過)
先用docker ps 查看容器id,拿到id 進(jìn)去相應(yīng)容器
命令為
docker exec -ti 7a542556a73a /bin/bash
接下來(lái)在容器內(nèi)查看當(dāng)前時(shí)間是否和中國(guó)時(shí)間一致
date -R
如果不一致需要在Dockerfile時(shí)加上
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
第三步:應(yīng)用程序時(shí)區(qū)
比如java代碼中new出的date查看飒炎,如果不是中國(guó)時(shí)區(qū),可以在Dockerfile中加上
ENV JAVA_OPTS $JAVA_OPTS -Duser.timezone=GMT+08
如果是框架的時(shí)區(qū)問題,那要查詢對(duì)應(yīng)框架的時(shí)區(qū)設(shè)置
比如springboot的時(shí)區(qū)設(shè)置如下
public class SpringBootApplication{
public static void main(String[] args) {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
SpringApplication.run(SpringBootApplication.class, args);
}
}
除此之外,程序處理完后需要返回前端也有時(shí)區(qū)差異
springboot中需要在application.yml中設(shè)置
spring:
jackson:
time-zone: Asia/Shanghai
第四步:至此后臺(tái)時(shí)區(qū)一致漾峡,前端展示基本不會(huì)有問題,不多敘述
歡迎大家加入Java技術(shù)群
1544106895022.png