當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot时区配置
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot时区配置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、測試數據
- 二、結論
- 三、對應截圖
- 表格截圖:
- -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指定時區
測試數據 + 結論 + 表格截圖
提示:表格中列出的名稱不是很規范, 大家看一下對應的截圖, 就知道了
一、測試數據
下面會列出一個表格, 就表格中的一些內容先做一下講解:
如果這里我表達的不是很清楚, 文章的下面也列出了對應的截圖
| +0800 | CST | GMT%2B8 | GMT+8 | GMT+8 | 2019-11-22 10:12:13 | 2019-11-22 10:12:13 | 2019-11-22 10:12:13 | 是 |
| +0800 | CST | GMT%2B8 | GMT+8 | GMT+2 | 2019-11-22 10:12:13 | 2019-11-22 10:12:13 | 2019-11-22 04:12:13 | 否 |
| +0800 | CST | GMT%2B8 | UTC | GMT+8 | 2019-11-22 10:12:13 | 2019-11-22 02:12:13 | 2019-11-22 10:12:13 | 否 |
| +0800 | CST | GMT%2B8 | UTC | GMT+2 | 2019-11-22 10:12:13 | 2019-11-22 02:12:13 | 2019-11-22 04:12:13 | 否 |
| +0800 | CST | GMT%2B8 | GMT+2 | GMT+8 | 2019-11-22 10:12:13 | 2019-11-22 04:12:13 | 2019-11-22 10:12:13 | 否 |
| +0800 | CST | UTC | GMT+8 | GMT+8 | 2019-11-22 10:12:13 | 2019-11-22 18:12:13 | 2019-11-22 18:12:13 | 否 |
| +0800 | CST | UTC | UTC | GMT+0 | 2019-11-22 10:12:13 | 2019-11-22 10:12:13 | 2019-11-22 10:12:13 | 是 |
| +0800 | CST | UTC | UTC | GMT+8 | 2019-11-22 10:12:13 | 2019-11-22 10:12:13 | 2019-11-22 18:12:13 | 否 |
| +0800 | CST | GMT%2B2 | GMT+3 | GMT+4 | 2019-11-22 10:12:13 | 2019-11-22 11:12:13 | 2019-11-22 12:12:13 | 否 |
| +0800 | CST | GMT-2 | GMT-3 | GMT-4 | 2019-11-22 10:12:13 | 2019-11-22 09:12:13 | 2019-11-22 08:12:13 | 否 |
| +0000 | UTC | GMT-2 | GMT-3 | GMT-4 | 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配置時區
= 2019-11-22 10:12:13 - 8 + 8
= 2019-11-22 10:12:13
三、對應截圖
表格截圖:
-Duser.timezone
jdbc:mysql
time-zone
SQL日志 控制臺
接口出參
總結
- 從上面的統計, 時間都是基于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 …等等, 這個含義哈, 這個還得麻煩大家自行處理了, 汗顏, 哈哈哈, 當然也可以參考: 各個地區對應時區的網址嗎以及對應的用法
總結
以上是生活随笔為你收集整理的SpringBoot时区配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: service暴露端口的方式与代理的方式
- 下一篇: 数据库乐观锁和悲观锁的理解和实现(转载a