🙆

時刻フォーマット hhの罠

2024/11/12に公開

ある日、Kotlinで実装している際に時刻フォーマットに関するミスがあったので、同じミスをする人が少しでも減ればと思い、この記事を書いてみました。

24時間表記のフォーマット

2024-11-11T21:53:042024/11/11 21:53:04に整形したい場合、以下のようなプログラムを書いた経験はありますか?

    val dateTime = LocalDateTime.of(2024, 11, 11, 21, 53, 4)
    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")
    val formattedDateTime = dateTime.format(formatter)
    println(formattedDateTime)

過去の自分は書いてました...
この書き方だと出力が24時間表記になりません...

出力
2024-11-11 09:53:04

実際には以下のように時間部分はhhではなくHHを使うのが正解です。

    val dateTime = LocalDateTime.of(2024, 11, 11, 21, 53, 4)
    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    val formattedDateTime = dateTime.format(formatter)
    println(formattedDateTime)
出力
2024-11-11 21:53:04

hhとHHの違い

  • hh: 12時間形式 (01-12)
  • HH: 24時間形式 (00-23)

hhだと12時間形式になってしまうため、13時の場合は01(午後1時)と表現されてしまいます。

まとめ

hhHHの違いを理解していなかったので、これから24時間表記の場合はHHを使用していこうと思いました。
もしhhを使いたい場合は、AM/PMを表すaをつけてフォーマットしてあげる方法もあるのかなと思います。

    val dateTime = LocalDateTime.of(2024, 11, 11, 21, 53, 4)
    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a")
    val formattedDateTime = dateTime.format(formatter)
    println(formattedDateTime)
出力
2024-11-11 09:53:04 PM

Discussion