minSdkVersion 24未満のプロジェクトでSimpleDateFormatを使ってISO-8601に対応してはいけない

問題

1
SimpleDateFormat("yyyy-MM-dd'T'00:00:00XXX", Locale.getDefault())

WEB APIに送る日付書式をISO-8601の拡張形式に準拠した形式にするため、上記のようなコードを書いていたらAndroid 6未満でIllegalArgumentExceptionが発生してました。
メッセージは下記のようなものでXが認識されてないようでした。

1
Unknown pattern character 'X'

ソースコードを読んだところ、Android 6に含まれるSimpleDateFormatの実装ではStringで渡される日付フォーマットにXが入ることが考慮されていないようでした。
Android 7以降では問題なく動作しているので、Android 6ではJava6ベースのSimpleDateFormatが、Android 7ではJava7ベースのSimpleDateFormatが使われてるのではないかと推測します。(調べ方がわからない。。。)

対策

ThreeTenABPを使いました。
ThreeTenABPはAndroidでJava8のDate and Time APIの一部をバックポートできるライブラリです。
Java8のDate and Time API使えば間違いないやろ!と考えてましたが、AndroidでJava8を使うにはAPIレベル 26が必要らしくもう数年待つ必要がありました。

まとめ

DroidKaigiアプリでThreeTenABPが使われてて、何か便利なのだろうけど何が便利なのかわからんという状態でしたが今回の件でありがたみを理解できました。

参考サイト