2025年4月5日土曜日

Kotlin Multiplatformで日時をフォーマットする

Kotlin Multiplatformで日付を言語ロケールに合わせてフォーマットしたい場合はどうしたらいいでしょうか。 Kotlin Multiplatformで日時を扱うには kotlinx-datetime ライブラリを利用することが一般的だと思います。このライブラリは基本的な日時操作機能を提供していますが、ロケールに合わせたフォーマット機能はありません。

expect/actualで実装する

現状では expect/actual 機構を使って、各プラットフォーム固有の日時フォーマットを実装するのが現実的です。 以下はその実装例です。

共通モジュールでの定義

まず、共通モジュールに機能を定義します。

// 共通モジュールに定義
expect class DateTimeFormatter() {
    fun format(instant: Instant, timeZone: TimeZone): String
}

JVM(Android)実装

JVMプラットフォームではJava標準ライブラリの日時フォーマット機能を使います。