web-dev-qa-db-ja.com

Instant vsLocalDateTime-どちらを優先するか

サーバーでUTCで発生したイベントの日時を保存して表示する必要があります。 Instant.now()またはLocalDateTime.now(ZoneOffset.UTC)を使用するオプションがあります

いつどちらを優先する必要がありますか?

22
galbarm

それはあなたがデータで何をしたいかによります。 2つのタイプは概念的に異なります。

イベントがUTCの午前8時に発生したと想像してください。

LocalDateTimeを取得すると、タイムゾーン情報が失われ、技術的には任意のタイムゾーンになる可能性があります。つまり、UTC午前8時または東部標準時午前8時(=午後1時)です。これは、LocalDateTimeが実際にはUTCの瞬間であるという慣習を「知っている」必要があることを意味します。

Instantを使用する場合、タイムゾーンに関係なく、どの瞬間が参照されているかを正確に把握でき、外部の「知識」や慣習は必要ありません。ただし、タイムゾーン情報もないため、英国時間の午前8時(中央ヨーロッパ標準時)または午前3時(EST)のどちらであるかはわかりません(ただし、これらはすべて同じ時点を表しています)。

最後に、瞬間とそれを関連付ける必要のあるタイムゾーンの両方が必要な場合は、Instantとタイムゾーンの情報を持つZonedDateTimeまたはOffsetDateTimeを使用できます。

27
assylias