問題
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が使われてて、何か便利なのだろうけど何が便利なのかわからんという状態でしたが今回の件でありがたみを理解できました。