springboot項(xiàng)目如何設(shè)置時(shí)區(qū)
springboot項(xiàng)目設(shè)置時(shí)區(qū)
在springboot啟動(dòng)類里添加如下代碼:
? ? @PostConstruct
? ?void setDefaultTimezone() {
? ? ? TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
// ? ?TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
? ?}用任何一個(gè)都行,將默認(rèn)時(shí)區(qū)設(shè)置為東八區(qū)。
應(yīng)用場景
有時(shí)候應(yīng)用服務(wù)器的時(shí)間是UTC協(xié)調(diào)世界時(shí)間,在我們用瀏覽器訪問的時(shí)候,就會(huì)出現(xiàn)日期快八小時(shí),
因?yàn)榉?wù)器的時(shí)區(qū)跟我們東八區(qū)差八個(gè)小時(shí)導(dǎo)致的,用以上方法可以解決這個(gè)問題。
springboot統(tǒng)一時(shí)區(qū)的方案
UTC時(shí)間是什么
- 協(xié)調(diào)世界時(shí),又稱世界統(tǒng)一時(shí)間、世界標(biāo)準(zhǔn)時(shí)間、國際協(xié)調(diào)時(shí)間。
- 由于英文(CUT)和法文(TUC)的縮寫不同,作為妥協(xié),簡稱UTC。
UTC +時(shí)區(qū)差=本地時(shí)間
中國時(shí)間
- 中國大陸、中國香港、中國澳門、中國臺(tái)灣、蒙古國、新加坡、
- 馬來西亞、菲律賓、西澳大利亞州的時(shí)間與UTC的時(shí)差均為+8,也就是UTC+8。
1.系統(tǒng)采用多時(shí)區(qū)設(shè)計(jì)的時(shí)候,往往我們需要統(tǒng)一時(shí)區(qū),需要統(tǒng)一的地方如下:
- 服務(wù)器(Tomcat服務(wù))
- 數(shù)據(jù)庫(JPA + Hibernate)
- 前端數(shù)據(jù)(前端采用Vuejs)
思路為:
- 將數(shù)據(jù)庫和服務(wù)器的時(shí)間都采用標(biāo)準(zhǔn)時(shí)區(qū)UTC存儲(chǔ)處理。
- 前端拿到標(biāo)準(zhǔn)時(shí)區(qū)的數(shù)據(jù),統(tǒng)一根據(jù)用戶所在時(shí)區(qū)進(jìn)行轉(zhuǎn)換。
- 這樣保證了后端數(shù)據(jù)時(shí)區(qū)的一致性,前端根據(jù)實(shí)際情況進(jìn)行渲染。
2.保證服務(wù)器時(shí)區(qū)為UTC
服務(wù)啟動(dòng)的時(shí)候,將當(dāng)前時(shí)區(qū)設(shè)置為UTC,代碼如下:
@SpringBootApplication
? ? public class Application {
? ? ? @PostConstruct
? ? ? void started() {
? ? ? ? TimeZone.setDefault(TimeZone.getTimeZone("UTC"));3.保證數(shù)據(jù)庫時(shí)區(qū)為UTC
Hibernate支持設(shè)置時(shí)區(qū),在Springboot中增加配置如下:
spring.jpa.properties.hibernate.jdbc.time_zone = UTC
如果是MySQL數(shù)據(jù)庫,連接池鏈接后面增加配置如下:
?serverTimezone=TimeZone&useLegacyDatetimeCode=false
如:
spring.datasource.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false&serverTimezone=UTC
其中useLegacyDatetimeCode參數(shù)默認(rèn)是true,我們需要手動(dòng)設(shè)置為false,否則無效。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 深入詳解SpringBoot中時(shí)區(qū)問題解決與配置方案
- SpringBoot時(shí)區(qū)問題解決以及徹底解決時(shí)差問題
- 如何解決springboot數(shù)據(jù)庫查詢時(shí)出現(xiàn)的時(shí)區(qū)差異問題
- SpringBoot如何根據(jù)用戶系統(tǒng)時(shí)區(qū)動(dòng)態(tài)展示時(shí)間
- springboot如何統(tǒng)一設(shè)置時(shí)區(qū)
- SpringBoot中?Jackson?日期的時(shí)區(qū)和日期格式問題解決
- SpringBoot:JPA + AuditingEntityListener時(shí)區(qū)設(shè)置方式
- 關(guān)于SpringBoot mysql數(shù)據(jù)庫時(shí)區(qū)問題
- SpringBoot時(shí)區(qū)設(shè)置的幾個(gè)方面小結(jié)
相關(guān)文章
淺談java實(shí)現(xiàn)redis的發(fā)布訂閱(簡單易懂)
本篇文章主要介紹了淺談java實(shí)現(xiàn) redis的發(fā)布訂閱(簡單易懂),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
java中判斷字符串?dāng)?shù)組是否包含特定字符串的三種方法實(shí)現(xiàn)與對(duì)比
這篇文章主要為大家詳細(xì)介紹了java中判斷字符串?dāng)?shù)組是否包含特定字符串的三種方法實(shí)現(xiàn)與對(duì)比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-12-12
Java使用java -jar啟動(dòng)并按日分包日志的最佳實(shí)踐
在生產(chǎn)環(huán)境中,Java應(yīng)用程序通常以java -jar方式運(yùn)行,而日志管理是運(yùn)維的重要部分,如果日志文件過大,不僅影響性能,還會(huì)增加排查問題的難度,因此,按日分包日志成為常見的需求,本文將介紹4種實(shí)現(xiàn)方式,并提供詳細(xì)配置和代碼示例,需要的朋友可以參考下2025-07-07
SpringBoot3.x版本與Mybatis-Plus不兼容問題
當(dāng)使用3.x版本的SpringBoot結(jié)合Mybatis-Plus時(shí)版本不兼容就會(huì)報(bào)錯(cuò),本文就來介紹一下這個(gè)問題的解決方法,感興趣的可以了解一下2024-03-03
基于Retrofit+Rxjava實(shí)現(xiàn)帶進(jìn)度顯示的下載文件
這篇文章主要為大家詳細(xì)介紹了基于Retrofit+Rxjava實(shí)現(xiàn)帶進(jìn)度顯示的下載文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Java純代碼實(shí)現(xiàn)導(dǎo)出pdf
在項(xiàng)目開發(fā)中,產(chǎn)品的需求越來越奇葩啦,開始文件下載都是下載為excel的,做著做著需求竟然變了,要求能導(dǎo)出pdf,所以本文就來用Java實(shí)現(xiàn)導(dǎo)出pdf功能吧2023-12-12
Java 創(chuàng)建并應(yīng)用PPT幻燈片母版的方法示例
幻燈片母版可供用戶設(shè)置幻燈片的樣式,本文將介紹如何用Java創(chuàng)建并應(yīng)用單個(gè)或多個(gè)幻燈片母版。感興趣可以了解一下2020-06-06

