历史版本3 :报表工程查询数据与数据库数据时间相差8小时 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

用户的外接数据库为 MySQL 数据库,日期字段的类型是 datetime 。Navicat 查看的日期数据和数据预览数据相差 8 小时,如下图,左侧是使用 Navicat 查看,右侧是数据集预览:

1613634503139137.png

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 查看当前时区,如下图所示:

1613635002946291.png

2.1.2 方案一:修改此次登录时区

方法对应语句
方法一:修改 Linux 当前时区tzselect
方法二:仅限于 RedHat Linux 和 CentOStimeconfig

tzselect语句为例,如下所示:

1)输入tzselect修改当前时区,如下图所示:

1613636188815381.png

2)输入TZ='Asia/Shanghai';export TZ使时区生效,如下图所示:

8.png

2.1.3 方案二:永久修改时区

TZ='Asia/Shanghai';export TZ添加到/home/username/.profile文件中,然后重新登录即可。

注:.profile 文件默认隐藏,需要使用 ls -a 才能看到。

1613699692530899.png

2.2 Windows 系统

找到日期和时间,即可修改时区。如下图所示:

1613636994416734.png

3. 数据源时区编辑

在定义数据连接的 URL 后,添加参数,将数据源的时区设置为东八区。如下图所示:

&useTimezone=true&serverTimezone=GMT%2B8

1613637466611872.png

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"

12.png

2)重启工程。

4.2 Windows 系统

1)编辑%Tomcat_HOME%\bin目录下的 catalina.bat,添加 JAVA_OPTS 参数,将数据源的时区设置为东八区:

set JAVA_OPTS=%JAVA_OPTS% -Duser.timezone=GMT+08

13.png

2)重启工程。