jvm中指定時區(qū)信息user.timezone問題及解決方式
問題
同一份程序使用時間LocalDateTime類型,在國內(nèi)和國外部署后,返回的時間信息前端使用出問題。 因為LocalDateTime不帶時區(qū)信息,國內(nèi)調(diào)用后,前端頁面默認使用的瀏覽器所在os的時區(qū)(我們的系統(tǒng)中沒有給用戶設(shè)置時區(qū)), 因此會出現(xiàn)時間不一致, 或者判斷超時了,但是實際上沒有超時的問題。
解決方式:
要么返回timestamp數(shù)字類型,前端自己解析。 缺點:直接使用api的同事不方便看操作時間信息。
用戶可以可以在個的profile中設(shè)置時區(qū),方便各個時區(qū)用戶在一個系統(tǒng)中操作。 缺點:改動較多。
最后的折中方法:
后端內(nèi)部使用ZonedDateTime,返回的時間中帶上時區(qū)信息。 備注:這里應(yīng)用系統(tǒng)沒有使用數(shù)據(jù)庫,因為沒有使用數(shù)據(jù)庫時間格式。
這里??遇到一個問題,國內(nèi)機器都是時區(qū)為
springboot 程序啟動后,ZoneDateTime 格式默認是"2023-02-16T21:44:31.914407+08:00";
但是國外的機器不行,依然不帶時區(qū)信息。
在jvm啟動參數(shù)中指定時區(qū)信息
國內(nèi)啟動不指定時間,os默認的是"Asia/Shanghai"。 國外的啟動參數(shù)指定為-Duser.timezone=CET
示意:(這里是示意,省略其他參數(shù),實際參數(shù)要跟多)
Java -jar -Dspring.profiles.active=dev -Duser.timezone=CET app.jar
具體代碼
1,ObjectMapper中設(shè)置時區(qū)和時間格式
ObjectMapper mapper = new ObjectMapper(); mapper.findAndRegisterModules(); mapper.setTimeZone(TimeZone.getDefault()); // 在本項目必須有這樣,某則有些接口中返回的ZonedDateTime序列化后不帶時區(qū)信息,添加這行就會帶上時區(qū)信息 mapper.registerModule(new JodaModule()); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); return mapper;
2, 其他區(qū)地方解析返回的時間
引入依賴包
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.12.2</version> </dependency>
import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ").withZoneUTC(); // String str = "2022-02-16T21:44:31.914407+08:00"; String str = "2022-02-17T14:35:48.8932+08:00"; //String str = "2022-02-16T21:44:31+09:00"; DateTime dateTime = formatter.parseDateTime(str); log.info("dateTime:{}", dateTime); String strAgain = dateTime.toString(formatter); log.info("strAgain:{}", strAgain);
到此這篇關(guān)于jvm中指定時區(qū)信息user.timezone的文章就介紹到這了,更多相關(guān)jvm時區(qū)信息user.timezone內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡單講解Java的Socket網(wǎng)絡(luò)編程的多播與廣播實現(xiàn)
這篇文章主要介紹了Java的Socket網(wǎng)絡(luò)編程的多播與廣播實現(xiàn),包括網(wǎng)絡(luò)編程發(fā)送和接受數(shù)據(jù)的一些基礎(chǔ)知識整理,需要的朋友可以參考下2016-01-01java可變參數(shù)(不定向參數(shù))的作用與實例
這篇文章主要給大家介紹了關(guān)于java可變參數(shù)(不定向參數(shù))的作用與實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04Java獲取XML節(jié)點總結(jié)之讀取XML文檔節(jié)點的方法
下面小編就為大家?guī)硪黄狫ava獲取XML節(jié)點總結(jié)之讀取XML文檔節(jié)點的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10Java實現(xiàn)線程安全單例模式的五種方式的示例代碼
這篇文章主要介紹了Java中實現(xiàn)線程安全單例模式的五種方式:餓漢式、枚舉單例、懶漢式、DCL懶漢式和靜態(tài)內(nèi)部類懶漢單例,感興趣的可以了解一下2022-03-03Java AbstractMethodError案例分析詳解
這篇文章主要介紹了Java AbstractMethodError案例分析詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08Springboot整合quartz實現(xiàn)多個定時任務(wù)實例
這篇文章主要介紹了Springboot整合quartz實現(xiàn)多個定時任務(wù)代碼實例,Quartz?是一款功能強大的開源任務(wù)調(diào)度框架,幾乎可以集成到任何?Java?應(yīng)用程序中,Quartz?可用于創(chuàng)建簡單或復(fù)雜的任務(wù)調(diào)度,用以執(zhí)行數(shù)以萬計的任務(wù),需要的朋友可以參考下2023-08-08詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問題
本篇文章主要介紹了詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03Java使用selenium爬取b站動態(tài)的實現(xiàn)方式
本文主要介紹了Java使用selenium爬取b站動態(tài)的實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01