現在時刻 ⇔ ( エポック秒 / UNIX時間 ) ⇔ DateTime

現在時刻を LocalDateTimeで取得

jshell> import java.time.*
jshell> LocalDateTime.now()
$1 ==> 2022-06-01T09:35:16.762675

現在時刻を エポック秒 / UNIX時間 で取得

jshell> import java.time.*
jshell> Instant.now().getEpochSecond() //秒
$1 ==> 1656290265
jshell> Instant.now().toEpochMilli()   //ミリ秒
$2 ==> 1656290309813

特定のZonedDateTimeからエポック秒 / UNIX時間 に変換

ZonedDateTimeはタイムゾーンをもつ日時情報。

jshell> import java.time.*
//適当なZonedDateTime
jshell> ZonedDateTime.of(2022, 4, 1, 0, 0, 0, 0, ZoneId.systemDefault())
$50 ==> 2022-04-01T00:00+09:00[Asia/Tokyo]
jshell> $50.toInstant().getEpochSecond()  //秒
$51 ==> 1648738800
jshell> $50.toInstant().toEpochMilli()    //ミリ秒
$52 ==> 1648738800000

特定のLocalDateTimeからエポック秒 / UNIX時間に変換

LocalDateTimeはタイムゾーンを持たない日時情報なので、UTC基準のUnix時間に変換するには、そのLocalDateTimeをどのタイムゾーンを持つものなのか決定する必要がある。

jshell> import java.time.*
//適当なLocalDateTime
jshell> LocalDateTime.of(2022, 4, 1, 0, 0)
$60 ==> 2022-04-01T00:00
jshell> $60.toEpochSecond(ZoneOffset.ofHours(9))  //JSTの+9時間
$61 ==> 1648738800

LocalDateTimeにZoneOffsetをつけるために、適当に+9時間としていますが、本当はもう少し慎重になるべきで面倒くさい。

Asia/Tokyoが+9時間がであるというのは、当然のようだが、いつでも普遍的な値ではなくて、あるときからサマータイムが導入されたりすると、その期間はサマータイムがあるから+9ではなくなります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)