Androidのandroid.text.format.DateFormatはミリ秒を表示できない
数年に一度おなじ罠にはまっている気がするので、忘れないようにメモを残しておきます。
Javaで日時を扱うときの(古き良き)定番である SimpleDateFormat
はスレッドセーフではない上、インスタンス生成コストが高いという難点があります。
Androidだと端末によっては数百msecとかかかることもあり、割と致命的。なので代わりに android.text.format.DateFormat
を使うのが定石です。
ところが、android.text.format.DateFormat
の書式文字列はミリ秒に対応していません。書式文字列は SimpleDateFormat
に準じていると見せかけて、対応していない書式が結構あります。
この辺を明記しているドキュメントは見つけられなかったんですが、ソースコードを見れば自明でした。定数に SSS
がありませんし、ミリ秒を扱っている処理もみあたりません。
ミリ秒が必要な時は android.text.format.DateFormat
だけだと対応できません。SimpleDateFormat を使うなり、自前で算出するなり、別の手段を講じましょう。
そもそも日付周りはややこしいのですよね。多言語対応が絡むとなおさらです。
- 全体像
- android.text.format.DateUtils
- ThreeTenABP
関連(するかもしれない)記事
おススメ