OffsetDateTime - "2019-04-01T00:00:00+09:00" の "+09:00" って何??
OffsetDateTime っていうのはオフセット情報がついた日時のフォーマットです。
こういうやつ。
2019-04-01T00:00:00+09:00
で、ここの最後についている
+09:00
これがオフセットです。
厳密なところはISO 8601に定義されてるんですが
一旦気になるところだけ解説すると、
これはUTCからどれだけ時差があるか、を示しており、
詳しい人が見れば、どのあたりTimeZoneなのかがわかります。
まあ、経度が同じであれば ZoneId が異なっていてもオフセットは同じってことがありえる(1..n)ので、ある程度は、って感じです。
たとえばUTC+9時間はJST、Zone名でいうとAsia/Tokyo
が思い浮かびますが、ロシアのヤクーツク時間である Asia/Yakutsk
も同じオフセット(+09:00
)を持っています。
なので「だいたいあのへん」「このうちのどれか」ってのはわかりますが、特定まではできないですね。
TimeZoneの特定までしたいのであれば、OffsetDateTime ではなく ZonedDateTime を使う必要があります。
で、これ
2019-04-01T00:00:00+09:00
は単に
2019-04-01T00:00:00です
という意味です。
決して
この時刻に9時間プラスして2019-04-01T09:00:00
のように計算しなければいけないわけではありません。
そのまま日時を使えます。
ついでの情報として「ちなみになんだけど、この時刻はUTCから9時間プラスされています」っていう情報がくっついているだけです。
なのでこれをUTCに変換する場合は、この9時間前なので
日時としては2019-03-31T15:00:00
となります。
ただこれだと LocalDateTime と見分けがつかないので、
OffsetDateTime の UTCである印として、最後にZをつけて
2019-03-31T15:00:00Z
になり、時刻としては
2019-04-01T00:00:00+09:00
= 2019-03-31T15:00:00Z
ということになります。