1. 概述
1.1 问题描述
用户的外接数据库为 MySQL 数据库,日期字段的类型是 datetime 。Navicat 查看的日期数据和数据预览数据相差 8 小时。
1.2 关于时区
CST:中国标准时间。
GMT (Greenwich Mean Time):格林威治标准时间,指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
UCT (Universal Time Coordinated):世界标准时间。
GMT + 8 = UTC + 8 = CST 。
1.3 解决思路
排查顺序:系统时区>数据源时区>Tomcat时区。
1)确认服务器系统时间和数据库系统时间相同,例如都为东八区。
2)使用数据库小工具连接取数,查询出的时间与 Navicat 一致,判断是数据源和报表工程时区不同。
3)参考本文第三章节内容,修改数据源时区。
4)若 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目录。寻找名为setenv.sh的文件。如果文件不存在,可以创建一个新的setenv.sh文件。
注:请确保setenv.sh文件具有可执行权限。如果没有可执行权限,可以使用以下命令进行设置:chmod +x setenv.sh
2)使用文本编辑器打开setenv.sh文件。在文件中添加以下行来设置:
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08"
3)保存并关闭setenv.sh文件。
4)重启Tomcat服务器以使修改生效。
4.2 Windows
1)进入%Tomcat_HOME%\bin目录。寻找名为setenv.bat的文件。如果文件不存在,可以创建一个新的setenv.bat文件。
2)使用文本编辑器打开setenv.sh文件。在文件中添加以下行来设置:
set JAVA_OPTS=%JAVA_OPTS% -Duser.timezone=GMT+08
3)保存并关闭setenv.bat文件。
4)重启Tomcat服务器以使修改生效。