15 min/d

ぼうずやのにっき

Android で SimpleDateFormat の X が動かなかった

AndroidSimpleDateFormatX (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 を継承し、 formatparse をオーバーライドした。

Z (RFC 822 time zone) を使いつつ、+00:00Z の変換を追加したり、 : を足すなどした。 Stack Overflow にある方法 を参考に、独自で書いた。

そも java.time を使いたいところなのだが……。まあ使えないのだから仕方ない。

Android O からは使えるのかもしれない。

ABP (backport for Android) があるみたいだけど、大丈夫だろうか。作者は例によって Jake Wharton さんだ。

JakeWharton/ThreeTenABP

試していない。