ローカライズをしようと思った時に、ちょっと厄介なのが日付部分です。言語によって文字列も、記述順序も変わります。が、 DateFormat
にある getBestDateTimePattern
というメソッドを使えばそこらへんを自動でよろしくやってくれます。ということでこの記事では getBestDateTimePattern
を紹介しようと思います。
getBestDateTimePattern の特徴
- API Level 18 (Android 4.3)以上で使用可能
- 何の日付要素を表示するか(yyyyMMなど)を細かく設定できる
- 適切な日付要素の順番に並べてくれる
サンプルコード
private fun localizedDateString(epochSecond: Long): String {
val local = Locale.getDefault()
val format = DateFormat.getBestDateTimePattern(local, "EEEMMMd")
val dateFormat = SimpleDateFormat(format, local)
return dateFormat.format(epochSecond)
}
実行結果
設定アプリから言語を変更して試した結果がこちらです。Localeと結果文字列を出力しました。
ja_JP: 1月29日(水)
en_US: Wed, Jan 29
en_GB: Wed 29 Jan
es_ES: mié., 29 ene.
de_CH: Mi., 29. Jan.
getBestDateTimePattern
の第二引数には"EEEMMMd"と渡しているのに、言語に合わせて順番や書式が自動変換されているところが注目ポイントです。