Epoch からの秒数をローカル時刻(の文字列)に変換する (Kotlin / Java)

2023-05-14 (母の日)

調査したのは昨年の 6月頃だが、今になってここに載せており、少し情報が古くなっているかもしれない。

しょうもないことでハマってしまったので..

LocalDateTime や ZonedDateTime という class があるというのは知ったのだが (とある Google のサンプルコード から)..

さらに Instant という class があって、そしてそれを経由するといいらしい。 これなら比較的簡単に導き出せる。

[Java]Unixタイムスタンプと日時の変換 (ZonedDateTime, LocalDateTime)
Java 8: How to create a ZonedDateTime from an Epoch value? - Stack Overflow
    /**
     * get ZonedDateTime from Epoch second
     *
     * @param es    Epoch second
     */
    private fun getZonedDateTime(es: Long): ZonedDateTime {
        return ZonedDateTime.ofInstant(
            Instant.ofEpochSecond(es), ZoneId.systemDefault())
    }

    /**
     * get LocalDateTime from Epoch second
     *
     * @param es    Epoch second
     */
    private fun getLocalDateTime(es: Long): LocalDateTime {
        return LocalDateTime.ofInstant(
            Instant.ofEpochSecond(es), ZoneId.systemDefault())
    }

前者だと `2022-06-24T03:08:01+09:00[Asia/Tokyo]` といった文字列が得られる。

後者だと `2022-06-24T03:08:01` といった文字列が得られる (LocalDateTime はタイムゾーンの情報を持っていないので)。

以上


覚書など | nsmrtks