最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中?Jackson?日期的時(shí)區(qū)和日期格式問(wèn)題解決

 更新時(shí)間:2022年12月10日 11:29:41   作者:蜀山雪松  
因?yàn)樽罱?xiàng)目需要國(guó)際化,需要能夠支持多種國(guó)際化語(yǔ)言,目前需要支持三種(法語(yǔ)、英語(yǔ)、簡(jiǎn)體中文),這篇文章主要介紹了SpringBoot中?Jackson?日期的時(shí)區(qū)和日期格式問(wèn)題,需要的朋友可以參考下

1、使用場(chǎng)景

        因?yàn)樽罱?xiàng)目需要國(guó)際化,需要能夠支持多種國(guó)際化語(yǔ)言,目前需要支持三種(法語(yǔ)、英語(yǔ)、簡(jiǎn)體中文)。我們的項(xiàng)目部署環(huán)境為使用阿里云(德國(guó))節(jié)點(diǎn)。以前我們項(xiàng)目主要用戶在中國(guó)國(guó)內(nèi)。一部署到德國(guó)服務(wù)器節(jié)點(diǎn)就出現(xiàn)一個(gè)問(wèn)題了。數(shù)據(jù)返回的時(shí)間不對(duì),存儲(chǔ)的時(shí)間也有時(shí)差了。此文章僅僅與UTC標(biāo)準(zhǔn)時(shí)間與北京時(shí)間(東八區(qū)時(shí)間)作為實(shí)際例子。最后跟蹤發(fā)現(xiàn),如下幾點(diǎn)原因:

1.1、數(shù)據(jù)庫(kù)MySQL也是有時(shí)區(qū)的概念的。

     通過(guò)如下命令可以查詢MySQL的時(shí)區(qū)

 show variables like "%time_zone%";

如果未做任何修改會(huì)顯示如下:

+------------------+--------+
| Variable_name  | Value |
+------------------+--------+
| system_time_zone | CST  |
| time_zone    | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
#time_zone說(shuō)明mysql使用system的時(shí)區(qū),system_time_zone說(shuō)明system使用CST時(shí)區(qū)

1.2、系統(tǒng)時(shí)區(qū)意味著與計(jì)算機(jī)的操作系統(tǒng)時(shí)區(qū)相同。

以下是我們北京時(shí)間使用MySQL時(shí)區(qū)

 set global time_zone = '+8:00'; ##修改mysql全局時(shí)區(qū)為北京時(shí)間,即我們所在的東8區(qū)
> set time_zone = '+8:00'; ##修改當(dāng)前會(huì)話時(shí)區(qū)
> flush privileges; #立即生效

或者通過(guò)修改MySQL的 my.cnf配置文件來(lái)修改時(shí)區(qū)
# vim /etc/my.cnf ##在[mysqld]區(qū)域中加上
default-time_zone = '+8:00'
# /etc/init.d/mysqld restart ##重啟mysql使新時(shí)區(qū)生效

1.2、SpringBoot默認(rèn)的Json視圖轉(zhuǎn)換框架Jackson也有時(shí)區(qū)概念

     Jackson日期反序列化時(shí)區(qū)問(wèn)題,Jackson里 JsonFormat的源碼

/**
 * Value that indicates that default {@link java.util.TimeZone}
 * (from deserialization or serialization context) should be used:
 * annotation does not define value to use.
 *<p>
 * NOTE: default here does NOT mean JVM defaults but Jackson databindings
 * default, usually UTC, but may be changed on <code>ObjectMapper</code>.
 */
public final static String DEFAULT_TIMEZONE = "##default";
 
值,該值指示默認(rèn){@鏈接java.util.TimeZone}
 
(來(lái)自反序列化或序列化上下文)應(yīng)使用:
 
注釋未定義要使用的值。
 
注意:這里的默認(rèn)值并不意味著JVM默認(rèn)值,而是Jackson數(shù)據(jù)綁定。
 
默認(rèn)值,通常為UTC,但可以在<code>objectmapper<code>上更改。

那個(gè)注釋已經(jīng)說(shuō)明默認(rèn)情況下會(huì)將 時(shí)區(qū)設(shè)置為UTC ,Jackson反序列化時(shí)間類型的底層實(shí)際上調(diào)用的是Java的 SimpleDateFormat#parse() 方法,而JVM中的時(shí)區(qū)則會(huì)根據(jù)你的操作系統(tǒng)來(lái)獲取,所以JVM認(rèn)為你的時(shí)區(qū)應(yīng)該是 GMT+8 時(shí)區(qū),
而要將 UTC 時(shí)區(qū)的時(shí)間轉(zhuǎn)成 GMT+8 時(shí)區(qū)的時(shí)間,就會(huì)將你傳進(jìn)來(lái)的時(shí)間+8個(gè)小時(shí)。

2、代碼實(shí)現(xiàn)

2.1、解決方案一下在每個(gè)帶有日期地方加上注解

日期類型的字段上的 @JsonFormat 加上屬性 timezone="GMT+8"

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

此類方法需要在包含日期地方都加上注解屬性,比較繁瑣。

2.2、只需要配置一個(gè)bean實(shí)現(xiàn)整體修改

@Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
        return jacksonObjectMapperBuilder ->
                jacksonObjectMapperBuilder.timeZone(TimeZone.getTimeZone("GMT+8"));
    }

參考文章:Jackson日期反序列化時(shí)區(qū)問(wèn)題

2.3、使用SpringBoot的配置方式

spring.jackson.default-property-inclusion=NON_NULL
spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

第一個(gè)設(shè)置就是使用24小時(shí)的時(shí)間格式;第二個(gè)設(shè)置就是設(shè)置時(shí)區(qū)為東八區(qū)。

但是配置時(shí)候需要注意

Finally, if you opt out of the Spring Boot default MVC configuration by providing your own @EnableWebMvc configuration, you can take control completely and do everything manually by using getMessageConverters from WebMvcConfigurationSupport.

《Spring Boot Reference Guide》 

需要去掉

@EnableWebMvc

參考文章:

SpringBoot升級(jí)指定jackson版本的問(wèn)題

SpringBoot利用jackson格式化時(shí)間的三種方法

java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時(shí)間序列化

3、成果展現(xiàn)

        經(jīng)過(guò)轉(zhuǎn)換配置轉(zhuǎn)換之后;能夠正確的獲得和存取對(duì)應(yīng)的時(shí)間,建議使用

        2.2、只需要配置一個(gè)bean實(shí)現(xiàn)整體修改 或者使用 2.3、使用SpringBoot的配置方式 方式比較通用性。

其中如果使用FastJson轉(zhuǎn)換也可能遇見(jiàn)同樣的問(wèn)題,可以參考文章

springmvc fastjson 反序列化時(shí)間格式化方法(推薦)

4、總結(jié)

       在SpringBoot開(kāi)發(fā)應(yīng)用之中設(shè)計(jì)日期轉(zhuǎn)換需要特別注意,能夠主要目標(biāo)能夠是的存儲(chǔ)和返回的日期能夠?qū)?yīng)上自己的本地時(shí)區(qū)。同時(shí)能夠使用較為通用的轉(zhuǎn)換方式解決相關(guān)問(wèn)題。

相關(guān)文章

  • Java中避免寫嵌套if樣式的代碼詳解

    Java中避免寫嵌套if樣式的代碼詳解

    這篇文章主要給大家介紹了在Java中如何避免寫嵌套if樣式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • java并發(fā)編程包JUC線程同步CyclicBarrier語(yǔ)法示例

    java并發(fā)編程包JUC線程同步CyclicBarrier語(yǔ)法示例

    這篇文章主要為大家介紹了java并發(fā)編程工具包JUC線程同步CyclicBarrier語(yǔ)法使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 淺析Java中StringBuffer和StringBuilder的使用

    淺析Java中StringBuffer和StringBuilder的使用

    當(dāng)對(duì)字符串進(jìn)行修改的時(shí)候,需要使用 StringBuffer 和 StringBuilder 類。本文就來(lái)和大家簡(jiǎn)單聊聊這二者的使用與區(qū)別吧,希望對(duì)大家有所幫助
    2023-04-04
  • lambda表達(dá)式解決java后臺(tái)分組排序過(guò)程解析

    lambda表達(dá)式解決java后臺(tái)分組排序過(guò)程解析

    這篇文章主要介紹了lambda表達(dá)式解決java后臺(tái)分組排序過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解

    Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解

    這篇文章主要介紹了Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • java基于UDP實(shí)現(xiàn)圖片群發(fā)功能

    java基于UDP實(shí)現(xiàn)圖片群發(fā)功能

    這篇文章主要為大家詳細(xì)介紹了java基于UDP實(shí)現(xiàn)圖片群發(fā)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 文件路徑正確,報(bào)java.io.FileNotFoundException異常的原因及解決辦法

    文件路徑正確,報(bào)java.io.FileNotFoundException異常的原因及解決辦法

    這篇文章主要介紹了文件路徑正確,報(bào)java.io.FileNotFoundException異常的原因及解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Java NIO中的零拷貝原理

    Java NIO中的零拷貝原理

    這篇文章主要介紹了Java NIO中的零拷貝原理,零拷貝即Zero-Copy,顧名思義,零拷貝是指的一種非拷貝的方式來(lái)減少IO次數(shù)的工作方式,零拷貝的作用就是減少IO,提高IO效率,需要的朋友可以參考下
    2023-11-11
  • java中同類對(duì)象之間的compareTo()和compare()方法對(duì)比分析

    java中同類對(duì)象之間的compareTo()和compare()方法對(duì)比分析

    這篇文章主要介紹了java中同類對(duì)象之間的compareTo()和compare()方法對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Mybatis添加Ehcache支持的方法

    Mybatis添加Ehcache支持的方法

    mybatis添加ehcache支持非常簡(jiǎn)單,只主要在sql映射文件中添加一行代碼就可以實(shí)現(xiàn),糾結(jié)是什么代碼呢,這么神奇,帶著這樣問(wèn)題一起通過(guò)本文學(xué)習(xí)吧
    2016-08-08

最新評(píng)論

藁城市| 安陆市| 常熟市| 合水县| 微博| 皮山县| 潜江市| 元江| 虎林市| 固镇县| 巴青县| 溧阳市| 思南县| 舟曲县| 张家川| 宝坻区| 方正县| 汶上县| 锡林浩特市| 盐津县| 巴彦淖尔市| 新密市| 尤溪县| 农安县| 富顺县| 林州市| 江城| 河源市| 天门市| 漳州市| 镇坪县| 平舆县| 昌黎县| 广昌县| 北宁市| 昌江| 石楼县| 卢氏县| 乐山市| 雷山县| 文安县|