🙆
時刻フォーマット hhの罠
ある日、Kotlinで実装している際に時刻フォーマットに関するミスがあったので、同じミスをする人が少しでも減ればと思い、この記事を書いてみました。
24時間表記のフォーマット
2024-11-11T21:53:04
を2024/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時)
と表現されてしまいます。
まとめ
hh
とHH
の違いを理解していなかったので、これから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