現象
在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 |