1. ホーム

[解決済み】Java 8でLocalDateTimeからミリ秒を取得する方法

2022-03-25 20:12:36

質問

1970年1月1日(エポック)からの現在のミリ秒を取得する方法はないものでしょうか。 LocalDate , LocalTime または LocalDateTime クラスは、Java 8の

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

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

または

long currentMilliseconds = System.currentTimeMillis();

解決方法は?

現在のミリ秒」というのがどういう意味なのかよくわかりませんが、「エポック」、つまり1970年1月1日午前0時(UTC)からのミリ秒数ということにしておきます。

エポックからのミリ秒数を求めたい場合 今すぐ を使用します。 System.currentTimeMillis() として Anubian Noob さんのご指摘 . もしそうなら、これを行うために新しい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();