Java 8でLocalDateTimeからミリ秒を取得する方法 質問する

Java 8でLocalDateTimeからミリ秒を取得する方法 質問する

Java 8 の新しいLocalDateLocalTimeまたはクラスを使用して、1970 年 1 月 1 日 (エポック) からの現在のミリ秒を取得する方法があるかどうか知りたいです。LocalDateTime

既知の方法は以下の通りです。

long currentMilliseconds = new Date().getTime();

または

long currentMilliseconds = System.currentTimeMillis();

ベストアンサー1

「現在のミリ秒」が何を意味するのかはよくわかりませんが、「エポック」、つまり 1970 年 1 月 1 日の午前 0 時 (UTC) からのミリ秒数であると想定します。

現在のエポックからのミリ秒数を調べたい場合は、System.currentTimeMillis()次のように使用します。アヌビアン・ヌーブは指摘したもしそうなら、これを行うために新しい java.time API を使用する理由はありません。

ただし、すでにLocalDateTimeどこかから または類似のオブジェクトを取得していて、それをエポックからのミリ秒数に変換したい場合があります。LocalDateTimeオブジェクトのファミリには、それらがどのタイムゾーンにあるかという概念がないため、これを直接行うことはできません。したがって、UTC であるエポックを基準とした時間を見つけるには、タイムゾーン情報を提供する必要があります。

次のようなものがあるとしますLocalDateTime

LocalDateTime ldt = LocalDateTime.of(2014, 5, 29, 18, 41, 16);

タイムゾーン情報を適用して、 を指定する必要がありますZonedDateTime。私はロサンゼルスと同じタイムゾーンにいるので、次のようにします。

ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles"));

もちろん、これはタイムゾーンに関する仮定に基づいています。また、たとえば、現地時間がたまたま夏時間 (サマータイム) への移行に近い時間を指す場合など、エッジ ケースが発生することもあります。これらは脇に置いておきますが、このようなケースが存在することは知っておく必要があります。

とにかく、有効な を取得できればZonedDateTime、次のようにこれをエポックからのミリ秒数に変換できます。

long millis = zdt.toInstant().toEpochMilli();

おすすめ記事