javascript
SpringBoot时区配置
文章目錄
- 前言
- 一、測(cè)試數(shù)據(jù)
- 二、結(jié)論
- 三、對(duì)應(yīng)截圖
- 表格截圖:
- -Duser.timezone
- jdbc:mysql
- time-zone
- SQL日志 控制臺(tái)
- 接口出參
- 總結(jié)
前言
UTC: 全球標(biāo)準(zhǔn)時(shí)間
GMT: 格林威治標(biāo)準(zhǔn)時(shí)間
我不知道該怎么解釋UTC和GMT的關(guān)系, 我個(gè)人的理解是:
UTC+0=GMT+0,UTC+8=GMT+8 但是UTC不是GMT, GMT也不是UTC
這里會(huì)涉及到五個(gè)時(shí)區(qū)需要注意:
- JVM時(shí)區(qū)
- MySQL時(shí)區(qū)
- 系統(tǒng)時(shí)區(qū)
- jdbc鏈接時(shí)區(qū)
- jackson指定時(shí)區(qū)
測(cè)試數(shù)據(jù) + 結(jié)論 + 表格截圖
提示:表格中列出的名稱不是很規(guī)范, 大家看一下對(duì)應(yīng)的截圖, 就知道了
一、測(cè)試數(shù)據(jù)
下面會(huì)列出一個(gè)表格, 就表格中的一些內(nèi)容先做一下講解:
如果這里我表達(dá)的不是很清楚, 文章的下面也列出了對(duì)應(yīng)的截圖
| +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 | 否 |
二、結(jié)論
通過上面的數(shù)據(jù), 我得出一個(gè)結(jié)論:
SQL日志=
數(shù)據(jù)庫(kù)保存的數(shù)據(jù)對(duì)應(yīng)的時(shí)間
控制臺(tái)=
((SQL日志)(2019-11-22 10:12:13)) - (jdbc:mysql)(GMT%2B8)) + (-Duser.timezone)(GMT+8))
= MySQL保存時(shí)間 - jdbc鏈接指定時(shí)區(qū) + jvm時(shí)區(qū)
= 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保存時(shí)間 - jdbc鏈接指定時(shí)區(qū) + jackson配置時(shí)區(qū)
= 2019-11-22 10:12:13 - 8 + 8
= 2019-11-22 10:12:13
三、對(duì)應(yīng)截圖
表格截圖:
-Duser.timezone
jdbc:mysql
time-zone
SQL日志 控制臺(tái)
接口出參
總結(jié)
- 從上面的統(tǒng)計(jì), 時(shí)間都是基于MySQL保存的這個(gè)時(shí)間, 做對(duì)應(yīng)的±操作
- 在做涉及時(shí)區(qū)的項(xiàng)目, 如果就是一個(gè)地區(qū), 那就按當(dāng)?shù)貢r(shí)區(qū)設(shè)置就行. 但是如果是同一個(gè)項(xiàng)目, 多個(gè)地區(qū)運(yùn)行, 服務(wù)器就統(tǒng)一設(shè)置UTC時(shí)間, 包括數(shù)據(jù)庫(kù)UTC, JVM時(shí)區(qū)UTC, time-zone也就是展示給用戶看的時(shí)間, 配置對(duì)應(yīng)的GMT±
- 我沒有去看對(duì)應(yīng)的源碼, 只是寫了一個(gè)簡(jiǎn)單的測(cè)試用例得出的結(jié)果
- new Date() = UTC + (-Duser.timezone)
- 上面表格中列出的, 是不支持UTC±的寫法, 比如-Duser.timezone=UTC-8是識(shí)別不出來的
但是-Duser.timezone=GMT-8或者-Duser.timezone=UTC是可識(shí)別的 - 各個(gè)地區(qū)對(duì)應(yīng)時(shí)區(qū)的網(wǎng)址嗎以及對(duì)應(yīng)的用法: https://www.ibm.com/docs/zh/was/9.0.5?topic=ctzs-time-zone-ids-that-can-be-specified-usertimezone-property
- 根據(jù)地址查時(shí)區(qū): http://time.tianqi.com/dubai/
- 具體UTC GMT CST PRT WET CET ECT …等等, 這個(gè)含義哈, 這個(gè)還得麻煩大家自行處理了, 汗顏, 哈哈哈, 當(dāng)然也可以參考: 各個(gè)地區(qū)對(duì)應(yīng)時(shí)區(qū)的網(wǎng)址嗎以及對(duì)應(yīng)的用法
總結(jié)
以上是生活随笔為你收集整理的SpringBoot时区配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: service暴露端口的方式与代理的方式
- 下一篇: gradle idea java ssm