文章目錄
- 前言
- 一、測試資料
- 二、結論
- 三、對應截圖
-
- 表格截圖:
- -Duser.timezone
- jdbc:mysql
- time-zone
- SQL日志 控制台
- 接口出參
- 總結
前言
UTC: 全球标準時間
GMT: 格林威治标準時間
我不知道該怎麼解釋UTC和GMT的關系, 我個人的了解是:
UTC+0=GMT+0,UTC+8=GMT+8 但是UTC不是GMT, GMT也不是UTC
這裡會涉及到五個時區需要注意:
- JVM時區
- MySQL時區
- 系統時區
- jdbc連結時區
- jackson指定時區
測試資料 + 結論 + 表格截圖
提示:表格中列出的名稱不是很規範, 大家看一下對應的截圖, 就知道了
一、測試資料
下面會列出一個表格, 就表格中的一些内容先做一下講解:
如果這裡我表達的不是很清楚, 文章的下面也列出了對應的截圖
MySQL系統: 安裝MySQL的系統時間, 查詢指令: date -R
MySQL: 資料庫的時區配置, 查詢指令: SHOW VARIABLES LIKE '%time_zone%'
jdbc:mysql: jdbc:mysql://*****&serverTimezone=GMT
-Duser.timezone: JVM的時區
time-zone: spring.jackson.time-zone
SQL日志: 列印的SQL語句, 以及對應的結果
控制台: 當我們查詢出來的資料, 放入entity或者map集合, get出來的值
接口出參: 比如postman調用接口, 傳回的資料
MySQL系統 | MySQL | SQL日志 | 控制台 | 時間是否一緻 | ||||
---|---|---|---|---|---|---|---|---|
+0800 | CST | GMT%2B8 | GMT+8 | 2019-11-22 10:12:13 | 是 | |||
GMT+2 | 2019-11-22 04:12:13 | 否 | ||||||
UTC | 2019-11-22 02:12:13 | |||||||
2019-11-22 18:12:13 | ||||||||
GMT+0 | ||||||||
GMT%2B2 | GMT+3 | GMT+4 | 2019-11-22 11:12:13 | 2019-11-22 12:12:13 | ||||
GMT-2 | GMT-3 | GMT-4 | 2019-11-22 09:12:13 | 2019-11-22 08:12:13 | ||||
+0000 | 2021-07-21 11:51:16 | 2021-07-21 10:51:16 | 2021-07-21 09:51:16 |
二、結論
通過上面的資料, 我得出一個結論:
SQL日志=
資料庫儲存的資料對應的時間
控制台=
((SQL日志)(2019-11-22 10:12:13)) - (jdbc:mysql)(GMT%2B8)) + (-Duser.timezone)(GMT+8))
= MySQL儲存時間 - jdbc連結指定時區 + jvm時區
= 2019-11-22 10:12:13 - 8 + 8
= 2019-11-22 10:12:13
接口出參=
((SQL日志)(2019-11-22 10:12:13)) - ((jdbc:mysql)(GMT%2B8)) + ((time-zone)(GMT+8))
= MySQL儲存時間 - jdbc連結指定時區 + jackson配置時區
- 從上面的統計, 時間都是基于MySQL儲存的這個時間, 做對應的±操作
- 在做涉及時區的項目, 如果就是一個地區, 那就按當地時區設定就行. 但是如果是同一個項目, 多個地區運作, 伺服器就統一設定UTC時間, 包括資料庫UTC, JVM時區UTC, time-zone也就是展示給使用者看的時間, 配置對應的GMT±
- 我沒有去看對應的源碼, 隻是寫了一個簡單的測試用例得出的結果
- new Date() = UTC + (-Duser.timezone)
-
上面表格中列出的, 是不支援UTC±的寫法, 比如-Duser.timezone=UTC-8是識别不出來的
但是-Duser.timezone=GMT-8或者-Duser.timezone=UTC是可識别的
- 各個地區對應時區的網址嗎以及對應的用法: https://www.ibm.com/docs/zh/was/9.0.5?topic=ctzs-time-zone-ids-that-can-be-specified-usertimezone-property
- 根據位址查時區: http://time.tianqi.com/dubai/
- 具體UTC GMT CST PRT WET CET ECT …等等, 這個含義哈, 這個還得麻煩大家自行處理了, 汗顔, 哈哈哈, 當然也可以參考: 各個地區對應時區的網址嗎以及對應的用法