現在時刻を 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ではなくなります。