欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何解決java獲取時(shí)間相差8小時(shí)的問題

 更新時(shí)間:2021年09月13日 12:02:10   作者:穿越23小時(shí)  
最近使用new date()獲取的時(shí)間會(huì)和真實(shí)的本地時(shí)間相差8小時(shí)。本文就詳細(xì)的來介紹一下解決java獲取時(shí)間相差8小時(shí)的問題,感興趣的可以了解一下

三種時(shí)間差錯(cuò)問題:

  • java下使用new date()獲取的時(shí)間會(huì)和真實(shí)的本地時(shí)間相差8小時(shí)。
  • 本地獲取的時(shí)間沒有錯(cuò),存入數(shù)據(jù)庫的時(shí)候時(shí)間相差8小時(shí)。
  • 數(shù)據(jù)庫時(shí)間沒有錯(cuò),獲取到了后端,之后返回給前端相差8小時(shí)。

原因:

  • new date()調(diào)用的是jvm時(shí)間,而jvm使用的時(shí)間默認(rèn)是0時(shí)區(qū)的時(shí)間,即:和北京時(shí)間將會(huì)相差8小時(shí)。
  • mybatis將本地的數(shù)據(jù)傳入到mysql數(shù)據(jù)庫服務(wù)器的時(shí)候,服務(wù)器會(huì)對(duì)數(shù)據(jù)進(jìn)行檢測(cè),會(huì)把date類型的數(shù)據(jù)自動(dòng)轉(zhuǎn)換為mysql服務(wù)器所對(duì)應(yīng)的時(shí)區(qū),即0時(shí)區(qū),所以會(huì)相差8小時(shí)。
  • springboot中對(duì)加了@RestController或者@Controller+@ResponseBody注解的方法的返回值默認(rèn)是Json格式,
  • 所以,對(duì)date類型的數(shù)據(jù),在返回瀏覽器端時(shí),會(huì)被springboot默認(rèn)的Jackson框架轉(zhuǎn)換,而Jackson框架默認(rèn)的時(shí)區(qū)GMT(相對(duì)于中國是少了8小時(shí))。所以最終返回到前端結(jié)果是相差8小時(shí)

解決方案:

手動(dòng)設(shè)置jvm時(shí)間:將時(shí)間改為第8時(shí)區(qū)的時(shí)間:

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

溫馨提示:如果是springboot項(xiàng)目,可以面向切面加上這個(gè),或者啟動(dòng)main類上加上如下代碼:

@PostConstruct
    void started() {
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
    }

注意:不要用下面方式,這個(gè)方式是錯(cuò)的,GMT-8最后獲取的時(shí)區(qū)還是0時(shí)區(qū)的。網(wǎng)上很多的教程說的是下面的方式,親測(cè)不行。

TimeZone tz = TimeZone.getTimeZone("ETC/GMT-8");
TimeZone.setDefault(tz);

在apprication.yml文件中配置一下數(shù)據(jù)庫連接信息,url加上這么一句:
&serverTimezone=GMT%2b8

在這里插入圖片描述

可以解決存入數(shù)據(jù)庫的時(shí)間肯定是對(duì)的,本地獲取的時(shí)間則未必是北京時(shí)間。將spring的json構(gòu)造器的時(shí)區(qū)改正即可,在application.yml文件中添加:

在這里插入圖片描述

或者可以使用注解,在entity實(shí)體類的date數(shù)據(jù)上添加注解,那么數(shù)據(jù)庫傳回的data數(shù)據(jù)要轉(zhuǎn)換為json格式的時(shí)候就是北京時(shí)間了,再次傳回到前端的時(shí)候,也不會(huì)出現(xiàn)時(shí)區(qū)問題。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
 private Date lastTime;

不過,指的注意的是:這樣做,如果你的jvm時(shí)間依然是后臺(tái)0時(shí)區(qū)的,那么后臺(tái)要用時(shí)間執(zhí)行邏輯的時(shí)候,就要注意了,時(shí)間依然相差8小時(shí),還是建議用第一方法,直接整個(gè)jvm改為北京的8時(shí)區(qū)。

總結(jié):都是時(shí)區(qū)問題

三個(gè)問題對(duì)應(yīng)三種場(chǎng)景:

  • 后臺(tái)要存時(shí)間到數(shù)據(jù)庫的時(shí)候:用方法2解決本地時(shí)間和數(shù)據(jù)庫時(shí)間的問題;本質(zhì)是sql的服務(wù)器時(shí)區(qū)是0時(shí)區(qū)導(dǎo)致。
  • 后臺(tái)要使用本地時(shí)間的時(shí)候,改變jvm的時(shí)區(qū);本質(zhì)是jvm的時(shí)區(qū)是0時(shí)區(qū)導(dǎo)致。
  • 后臺(tái)返回?cái)?shù)據(jù)到前端的時(shí)候出現(xiàn)時(shí)區(qū)問題,用注解或者yml中配置json生成器解決轉(zhuǎn)換格式的問題。本質(zhì)是json的構(gòu)造器用的時(shí)區(qū)是0時(shí)區(qū)導(dǎo)致。

到此這篇關(guān)于如何解決java獲取時(shí)間相差8小時(shí)的問題的文章就介紹到這了,更多相關(guān)java獲取時(shí)間相差8小時(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用Java完成Socket通信

    如何使用Java完成Socket通信

    這篇文章主要介紹了如何使用Java完成Socket通信問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 深入理解Spring中的循環(huán)依賴

    深入理解Spring中的循環(huán)依賴

    Spring在注入bean的時(shí)候會(huì)做循環(huán)依賴檢查,下面這篇文章主要給大家介紹了關(guān)于Spring中循環(huán)依賴的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2018-05-05
  • idea打開項(xiàng)目后無法顯示目錄結(jié)構(gòu),只能顯示.iml文件問題

    idea打開項(xiàng)目后無法顯示目錄結(jié)構(gòu),只能顯示.iml文件問題

    這篇文章主要介紹了idea打開項(xiàng)目后無法顯示目錄結(jié)構(gòu),只能顯示.iml文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • swagger添加權(quán)限驗(yàn)證保證API(接口)安全性(兩種方法)

    swagger添加權(quán)限驗(yàn)證保證API(接口)安全性(兩種方法)

    這篇文章主要介紹了swagger添加權(quán)限驗(yàn)證保證API(接口)安全性(兩種方法),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • java線程組構(gòu)造方法源碼解析

    java線程組構(gòu)造方法源碼解析

    這篇文章主要為大家介紹了java線程組構(gòu)造方法源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 關(guān)于SSM框架下各層的解釋說明(Controller等)

    關(guān)于SSM框架下各層的解釋說明(Controller等)

    這篇文章主要介紹了關(guān)于SSM框架下各層的解釋說明(Controller等),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java中拷貝list數(shù)組幾種常見的方法

    Java中拷貝list數(shù)組幾種常見的方法

    這篇文章主要給大家介紹了關(guān)于Java中拷貝list數(shù)組幾種常見的方法,在Java中,List是一個(gè)接口,它有多個(gè)實(shí)現(xiàn)類,如ArrayList、LinkedList等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • Java應(yīng)用層協(xié)議WebSocket實(shí)現(xiàn)消息推送

    Java應(yīng)用層協(xié)議WebSocket實(shí)現(xiàn)消息推送

    后端向前端推送消息就需要長(zhǎng)連接,首先想到的就是websocket,下面這篇文章主要給大家介紹了關(guān)于java后端+前端使用WebSocket實(shí)現(xiàn)消息推送的詳細(xì)流程,需要的朋友可以參考下
    2023-02-02
  • Spring Boot Dubbo 構(gòu)建分布式服務(wù)的方法

    Spring Boot Dubbo 構(gòu)建分布式服務(wù)的方法

    這篇文章主要介紹了Spring Boot Dubbo 構(gòu)建分布式服務(wù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • 詳解springboot整合ehcache實(shí)現(xiàn)緩存機(jī)制

    詳解springboot整合ehcache實(shí)現(xiàn)緩存機(jī)制

    這篇文章主要介紹了詳解springboot整合ehcache實(shí)現(xiàn)緩存機(jī)制,ehcache提供了多種緩存策略,主要分為內(nèi)存和磁盤兩級(jí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論