Spring BootのJackson時刻設定まとめ
Spring Bootでオブジェクトをシリアライズするときにjava.util.Dateの変換を良きに計らってほしいときの設定
フォーマットとタイムゾーンの組み合わせで出力が変わってくるのでまとめてみた
下記のようなapplication.ymlに設定を書いていると想定
spring: jackson: dateFormat: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' time-zone: Asia/Tokyo
dateFormatとtime-zoneの設定を変えていく
dateFormatが4パターンとtime-zoneが2パターンで計8パターンを試した
出力はすべて同時刻の値
dateFormat | time-zone | 出力 |
---|---|---|
yyyy-MM-dd'T'HH:mm:ss.SSSZ | Asia/Tokyo | 2015-03-23T02:07:34.000+0900 |
yyyy-MM-dd'T'HH:mm:ss.SSSZ | 設定なし | 2015-03-23T02:07:34.000+0000 |
yyyy-MM-dd'T'HH:mm:ss.SSS'Z' | Asia/Tokyo | 2015-03-23T11:07:34.000Z |
yyyy-MM-dd'T'HH:mm:ss.SSS'Z' | 設定なし | 2015-03-23T02:07:34.000Z |
com.fasterxml.jackson. databind.util.ISO8601DateFormat |
Asia/Tokyo | 2015-03-23T02:07:34Z |
com.fasterxml.jackson. databind.util.ISO8601DateFormat |
設定なし | 2015-03-23T02:07:34Z |
設定なし | Asia/Tokyo | 1427076454000 |
設定なし | 設定なし | 1427076454000 |
設定なしっていうのはdateFormato: とかの行ごと消してるの意味
最後にシングルクォートなしのZをつけるとtime-zoneによって時差分の値が出力される
シングルクォートありだと+0900のかわりに時差分も時刻の中に含まれて計算される
com.fasterxml.jackson.databind.util.ISO8601DateFormatのときもtime-zoneの設定したら時刻に時差が含まれて計算されるのかと思ったらこっちは時差がスルーされた。なんでや・・・
両方設定なしだとlongな値で返ってくる. 当たり前だけど時差とか関係ない表記だからtime-zone指定しても同じ値になる
以上!