某WebAPIを使っているアプリを作成中です。
そのWebAPIから取得できるJSONに、lastBuildDateという日付を表す項目があったので、せっかくなのでそれをパースして日本語表記で出力しようと思ったのですが、Javaだとどうやって日付の文字列をDateに戻すのだろうと…。
ググったら、SimpleDateFormatというクラスがありました!
lastBuildDateの形式は、”EEE, dd MMM yyyy HH:mm:ss Z”でした。
Wed, 23 Feb 2011 02:55:21 +0900
みたいな感じです。なので、それを指定してみました。
// 失敗・・・
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
// jsonはJSONObject
try {
Date lastBuildDate = format.parse(json.getString("lastBuildDate"));
} catch (ParseException e) {
Toast.makeText(context, e.getLocalizeMessage(), Toast.LENGTH_LONG).show();
}
パースに失敗したよ!というトーストが表示されました。何故に!?
わからなかったので、SimpleDateFormatについてさらに調べたところ、オブジェクトを生成するときに引数でLocaleを渡している例を発見。しかも日本語だとMMMとしたときとかに日本語になったりするらしい。それはパースできんわ。ということで、引数を足してみました。
// Locale.ENGLISHを追加。これで上手くいった!!
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
// jsonはJSONObject
try {
Date lastBuildDate = format.parse(json.getString("lastBuildDate"));
} catch (ParseException e) {
Toast.makeText(context, e.getLocalizeMessage(), Toast.LENGTH_LONG).show();
}
Androidというよりも、Javaの話題なのですが、Androidだと端末毎にLocaleが決まるので、注意が必要ですね。Localeを英語にしていたら気付かずにバグを仕込むところでした(まぁ英語にする場合はデバッグのときくらいですが)
以上です!!

Pingback: Tweets that mention Android:SimpleDateFormatに潜む罠 | 自転車で通勤しましょ♪ブログ -- Topsy.com