SimpleDateFormatで例外が出る。 | オレのAndroidメモ

オレのAndroidメモ

自分自身のためのAndroidアプリ開発メモ。

[問題]

SimpleDateFormatで日付の文字列をDate型に格納しようしたら、Unparseable dateの例外が出る。



[症状]

RSSを取得して、日付の文字列をDate型に格納するプログラムを書いていました。


text = "Sat, 16 Jun 2012 13:29:49 +0000";

Date date;
SimpleDateFormat format = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");

try {
    date = format.parse(text);
} catch (ParseException e) {
}


エミュレータでは正常に動作するのに、Android端末の実機で動かすと、

Unparseable date: "Sat, 16 Jun 2012 13:29:49 +0000"

というParseExceptionが発生します。




[原因]

ロケールが設定されていなかった。


SimpleDateFormat format = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");

というところに、java.util.Locale.ENGLISHを設定すると例外は発生しなくなりました。

  ↓↓↓

SimpleDateFormat format = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", java.util.Locale.ENGLISH);


エミュレータは英語のロケールだったので、たまたま動いていたようです。
日本語のロケールだと、「Sat」などはパースできないみたいですね。