Java 8 の新しいLocalDate
、LocalTime
またはクラスを使用して、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();