こんにちは。 エキサイト株式会社の三浦です。
JSON上の日付文字列をDateTime型に変換するのはJavaではよくあると思いますが、その際の注意点について書いていきます。
JSONの日付文字列の変換方法
まずは、通常の変換方法について見ていきます。
例えば、
{ "sampleDate": "2021-01-01T10:10:00" }
のような形で日付が渡された場合は、
@Data public class SampleModel { @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime sampleDate; }
とすれば変換してくれます。
タイムゾーン込みの場合
以下のようにタイムゾーン込みの場合、
{ "sampleDate": "2021-01-01T10:10:00+09:00" }
こうしてしまうと実は変換できません。
@Data public class SampleModel { @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssZ") private LocalDateTime sampleDate; }
というのも、 Z
だけだと +0900
のようにコロンを付けないタイムゾーンのフォーマットとして処理してしまうためです。
+09:00
のようにコロンをつけたい場合は、
@Data public class SampleModel { @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssZZZZZ") private LocalDateTime sampleDate; }
このように、 ZZZZZ
としましょう。
なお、今回は LocalTimeZone
で受け取っていますが、これだと変換自体はできてもタイムゾーンは考慮されません。
タイムゾーン情報も使用したい場合は、 ZonedDateTime
型を使いましょう。
最後に
日付は様々なフォーマットがあるので、適切なものを選んでいく必要があります。 渡されるフォーマットに合わせることも大事ですが、渡す側でもどんなフォーマットで渡すかをきちんと考えていきましょう。