Epochからのミリ秒数で表されるlong
sとして日付を返す外部APIがあります。
古いスタイルの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());
Instant.ofEpochMilli(long) で始めることができます。
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();
もっと良い答えがあると思います。
new Timestamp(longEpochTime).toLocalDateTime();
new Date(startDateLong)
に代わる非常に単純な代替手段はLocalDate.ofEpochDay(startDateLong / 86400000L)
です。
あなたのエポック秒のタイムスタンプがSQLから来ているか、あるいはSQLに何らかの理由で関連している特定のケースでは、あなたはこれをこのように得ることができます:
long startDateLong = <...>
LocalDate theDate = new Java.sql.Date(startDateLong).toLocalDate();