Androidのandroid.text.format.DateFormatはミリ秒を表示できない

2021/03/23

数年に一度おなじ罠にはまっている気がするので、忘れないようにメモを残しておきます。

Javaで日時を扱うときの(古き良き)定番である SimpleDateFormat はスレッドセーフではない上、インスタンス生成コストが高いという難点があります。

Androidだと端末によっては数百msecとかかかることもあり、割と致命的。なので代わりに android.text.format.DateFormat を使うのが定石です。

ところが、android.text.format.DateFormat の書式文字列はミリ秒に対応していません。書式文字列は SimpleDateFormat に準じていると見せかけて、対応していない書式が結構あります。

この辺を明記しているドキュメントは見つけられなかったんですが、ソースコードを見れば自明でした。定数に SSS がありませんし、ミリ秒を扱っている処理もみあたりません。

ミリ秒が必要な時は android.text.format.DateFormat だけだと対応できません。SimpleDateFormat を使うなり、自前で算出するなり、別の手段を講じましょう。

そもそも日付周りはややこしいのですよね。多言語対応が絡むとなおさらです。




関連(するかもしれない)記事


おススメ