2017-06-07 Android で SimpleDateFormat の X が動かなかった
Android で SimpleDateFormat
の X
(ISO 8601 time zone) が効かない事象にあたった。
java - Android parse String to Date - unknown pattern character 'X' - Stack Overflow
ドキュメントには API level 1 から使えるとされている。
https://developer.android.com/reference/java/text/SimpleDateFormat.html
ただ、実際には動かなかった。 Java 6 にないからだろうか。
https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
Java SE 7 からはある。
http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
手元の unit test では動くが、実機で動かしてみるとおかしくなるので、頭を抱えた。
結局、強引に SimpleDateFormat
を継承し、 format
と parse
をオーバーライドした。
Z
(RFC 822 time zone) を使いつつ、+00:00
と Z
の変換を追加したり、 :
を足すなどした。 Stack Overflow にある方法 を参考に、独自で書いた。
そも java.time を使いたいところなのだが……。まあ使えないのだから仕方ない。
- https://developer.android.com/guide/platform/j8-jack.html
- https://developer.android.com/reference/java/time/package-summary.html
Android O からは使えるのかもしれない。
ABP (backport for Android) があるみたいだけど、大丈夫だろうか。作者は例によって Jake Wharton さんだ。
試していない。