UTC時間是什麼
協調世界時,又稱世界統一時間、世界標準時間、國際協調時間。
由於英文(CUT)和法文(TUC)的縮寫不同,作為妥協,簡稱UTC。
UTC +時區差=本地時間
複製程式碼
中國時間
中國大陸、中國香港、中國澳門、台灣、蒙古國、新加坡、
馬來西亞、菲律賓、西澳大利亞州的時間與UTC的時差均為+8,也就是UTC+8。
複製程式碼
1.系統採用多時區設計的時候,往往我們需要統一時區,需要統一的地方如下:
伺服器(Tomcat服務)
資料庫(JPA + Hibernate)
前端資料(前端採用Vuejs)
思路為:
將資料庫和伺服器的時間都採用標準時區UTC儲存處理。
前端拿到標準時區的資料,統一根據使用者所在時區進行轉換。
這樣保證了後端資料時區的一致性,前端根據實際情況進行渲染。
複製程式碼
2.保證伺服器時區為UTC
服務啟動的時候,將當前時區設定為UTC,程式碼如下:
複製程式碼
@SpringBootApplication
public class Application {
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
複製程式碼
3.保證資料庫時區為UTC
Hibernate支援設定時區,在Springboot中增加配置如下:
spring.jpa.properties.hibernate.jdbc.time_zone = UTC
如果是MySQL資料庫,連線池連結後面增加配置如下:
?serverTimezone=TimeZone&useLegacyDatetimeCode=false
如:
spring.datasource.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false&serverTimezone=UTC
複製程式碼
其中useLegacyDatetimeCode引數預設是true,我們需要手動設定為false,否則無效。
複製程式碼