现象
在JIRA上创建问题单、添加备注等操作的显示时间与系统时间或运行JIRA的机器的时间不一致。
原因
JIRA使用的时区(timezone) 是由 Java Virtual Machine 控制的,虚拟机默认使用系统时区。如果没有配置,可能会导致JIRA显示的时间与系统时间不一致的情况。
再深一点,日期和时间是被保存在JIRA数据库中,取决于数据库的时区信息。比如,对于PostgreSQL的 documentation:
所有时区声明的日期和时间都被保存在UTC内部。在显示到客户端之前,会根据时区配置,将其转换为特定时区的本地时间。
这个可以进一步证明:
jira6414=> select id, created from jiraissue; id | created -------+---------------------------- 10000 | 2016-09-06 18:41:53.983+00 10001 | 2016-09-06 22:12:49.983+00 ... 10300 | 2016-09-15 17:06:25.544+00 jira6414=> SET TIME ZONE 'PST8PDT'; SET jira6414=> select id, created from jiraissue; id | created -------+---------------------------- 10000 | 2016-09-06 11:41:53.983-07 10001 | 2016-09-06 15:12:49.983-07 ... 10300 | 2016-09-15 10:06:25.544-07
MySQL的时区可以按照 here 描述的方法进行配置。
此外,当通过另外一个服务器回复XML备份时,如果时区发生变化,会影响到数据库的所有时间信息。这将在后边详细介绍。
JRASERVER-26039 - Verify the system timezone when an XML backup is restored RESOLVED .
解决办法
- 根据我们Setting the timezone for the JAVA environment(见下文) KB介绍的方法修改时区。
- 确保在JIRA数据库中配置了所需时区的输出。
- 确认默认时区不会被已经安装的JIRA插件在运行时修改,这会导致很严重的问题。
设置JAVA环境时区
这篇知识库文章是专门为Atlassian服务器平台编写的,因为与Atlassian云平台的功能差异,这篇文章提到的不能应用在云产品上。
概述
Jira应用中的功能可能会依赖配置在JAVA环境中的时区,默认情况下,这个时区会操作系统中获取,但是,可以通过为JVM虚拟机添加额外参数来改变默认方式。
时区可以通过修改运行JAVA的服务器时间进行修改,或者通过如下解决介绍的修改配置的方式:
修改时区
时区可以通过如下JVM参数来修改,根据我们 Setting Properties and Options on Startup 文章中的方式实现。下边的李四将它设置为 America/Chicago:
-Duser.timezone=America/Chicago
Wikipedia上的时区列表List of TZ Database Time Zones 详细介绍了所有可设置的时区信息。
示例时区
Timezone | Code |
---|---|
Shanghai | Asia/Shanghai |
Los Angeles | America/Los_Angeles |
New York | America/New_York |
Paris | Europe/Paris |
Rome | Europe/Rome |
UTC | UTC |
Madrid | Europe/Madrid |
所有评论(0)