某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