1. ホーム

[解決済み】ミリ秒単位の長いエポック時間からJava 8 LocalDateを作成するにはどうすればよいですか?

2022-04-15 09:42:17

質問

外部APIで、日付を long エポックの始まりからのミリ秒として表されます。

古いスタイルのJava APIでは、単に Date を使い、そこから

Date myDate = new Date(startDateLong)

Java 8の LocalDate / LocalDateTime クラスは?

によって表される時点を変換することに興味があります。 long に変換してください。 LocalDate を、現在のローカルタイムゾーンで表示します。

解決方法は?

エポックからのミリ秒を取得し、現在のローカルタイムゾーンを使用してローカルの日付に変換したい場合は、次のようにします。

LocalDate date =
    Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();

しかし、システムのデフォルトのタイムゾーンさえも変更される可能性があることに留意してください。 long の値は、同じマシンであっても、次回以降の実行で異なる結果をもたらす可能性があります。

さらに、以下の点に注意してください。 LocalDate とは異なり java.util.Date は、日付と時刻ではなく、本当に日付を表しています。

それ以外の場合は LocalDateTime :

LocalDateTime date =
    LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());