1. 概述
1.1 問題描述
用戶的外接數據庫爲 MySQL 數據庫,日期字段的類型是 datetime 。Navicat 查看的日期數據和數據預覽數據相差 8 小時,如下圖,左側是使用 Navicat 查看,右側是數據集預覽:
1.2 關於時區
CST:中國标準時間。
GMT (Greenwich Mean Time):格林威治标準時間,指位於英國倫敦郊區的皇家格林尼治天文台的标準時間,因爲本初子午線被定義在通過那裏的經線。
UCT (Universal Time Coordinated):世界标準時間。
GMT + 8 = UTC + 8 = CST 。
1.3 解決思路
排查順序:系統時區>數據源時區>Tomcat時區。
确認服務器系統時間和數據庫系統時間相同,例如都爲東八區。
使用數據庫小工具連接取數,查詢出的時間與 Navicat 一緻,判斷是數據源和報表工程時區不同。
參考本文第三章節内容,修改數據源時區。
若 Tomcat 時區不正确,報表平台中查看到的日志時間也會是不正确的,參考本文第四章内容,修改 Tomcat 時區;若日志時間正确,則無需修改 Tomcat 時區。
2. 系統時區
2.1 Linux 系統
2.1.1 查看當前時區
使用date -R查看Linux 查看當前時區,如下圖所示:
2.1.2 方案一:修改此次登錄時區
方法 | 對應語句 |
---|---|
方法一:修改 Linux 當前時區 | tzselect |
方法二:僅限於 RedHat Linux 和 CentOS | timeconfig |
以tzselect語句爲例,如下所示:
1)輸入tzselect修改當前時區,如下圖所示:
2)輸入TZ='Asia/Shanghai';export TZ使時區生效,如下圖所示:
2.1.3 方案二:永久修改時區
将TZ='Asia/Shanghai';export TZ添加到/home/username/.profile文件中,然後重新登錄即可。
注:.profile 文件默認隐藏,需要使用 ls -a 才能看到。
2.2 Windows 系統
找到日期和時間,即可修改時區。如下圖所示:
3. 數據源時區
在定義數據連接的 URL 後,添加參數,将數據源的時區設置爲東八區。如下圖所示:
&useTimezone=true&serverTimezone=GMT%2B8
4. Tomcat 時區
若 Tomcat 時區不正确,報表平台中查看到的日志時間也會是不正确的,若日志時間正确,則無需修改 Tomcat 時區,本章提供修改 JDK1.8(Tomcat) 時區的方法。
4.1 Linux 系統
1)編輯%Tomcat_HOME%\bin目錄下的 catalina.sh,添加 JAVA_OPTS 參數,将數據源的時區設置爲東八區:
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08"
2)重啓工程。
4.2 Windows 系統
1)編輯%Tomcat_HOME%\bin目錄下的 catalina.bat,添加 JAVA_OPTS 參數,将數據源的時區設置爲東八區:
set JAVA_OPTS=%JAVA_OPTS% -Duser.timezone=GMT+08
2)重啓工程。