web-dev-qa-db-ja.com

ミリ秒単位の長いエポック時間からJava 8 LocalDateを作成する方法を教えてください。

Epochからのミリ秒数で表されるlongsとして日付を返す外部APIがあります。

古いスタイルのJava APIでは、単純にそれからDateを構築します。

Date myDate = new Date(startDateLong)

Java 8のLocalDate/LocalDateTimeクラスの同等物は何ですか?

現在の現地時間帯で、longで表される時刻をLocalDateに変換することに興味があります。

149
Vihung

エポック以降のミリ秒があり、現在のローカルタイムゾーンを使用してそれらを現地の日付に変換する場合は、次のようにします。

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

ただし、システムのデフォルトのタイムゾーンでさえも変更される可能性があるため、同じマシン上であっても、同じlongの値で以降の実行で異なる結果が生じる可能性があります。

さらに、LocalDateJava.util.Dateとは異なり、実際には日付であり、日時ではありません。

そうでなければ、LocalDateTimeを使うことができます。

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

Instant.ofEpochMilli(long) で始めることができます。

LocalDate date =
  Instant.ofEpochMilli(startDateLong)
  .atZone(ZoneId.systemDefault())
  .toLocalDate();
27
Meno Hochschild

もっと良い答えがあると思います。

new Timestamp(longEpochTime).toLocalDateTime();
10
Abhijeet

new Date(startDateLong)に代わる非常に単純な代替手段はLocalDate.ofEpochDay(startDateLong / 86400000L)です。

2
Michael Piefel

あなたのエポック秒のタイムスタンプがSQLから来ているか、あるいはSQLに何らかの理由で関連している特定のケースでは、あなたはこれをこのように得ることができます:

long startDateLong = <...>

LocalDate theDate = new Java.sql.Date(startDateLong).toLocalDate();
0
M. Prokhorov