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目录下的 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)重启工程。