hogepiyoエンジニアリング

トラブルシューティングからノウハウ、作ってみた系まで扱う情報系ブログ

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指定しても同じ値になる

以上!