私のアプリは Twitter フィードとブログ フィードを呼び出しており、どちらにももちろん投稿日が含まれています。電話が英語ロケールに設定されている場合は機能しますが、オランダ語またはドイツ語に切り替えると機能しません。問題のコードはロケールを呼び出すことさえせず、入力値もロケールに依存しません。
問題のコード:
tweets は、完全な Twitter フィードを含む JSONObject です。
final SimpleDateFormat formatter =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
final SimpleDateFormat parser =
new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
for (int i = 0; i < tweets.length(); i++) {
final JSONObject tweet = tweets.getJSONObject(i);
// The following line is where the failure occurs:
values.put(KEY_TWEET_DATE, formatter.format(parser.parse(tweet
.getString("created_at"))));
}
これは、ロケールが英語である限り機能します。
ドイツ語またはオランダ語に切り替えるとすぐに (私のアプリにはこれら 2 つの言語の翻訳が含まれていますが、これまでのところ他の言語を試したことはありません)、次のようなエラーが表示されます。
WARN/System.err(28273): java.text.ParseException: Unparseable date: Wed Jun 29 10:55:41 +0000 2011
WARN/System.err(28273): at java.text.DateFormat.parse(DateFormat.java:645)
WARN/System.err(28273): at squirrel.DeaddropDroid.DeaddropDB.updateTwitter(DeaddropDB.java:1453)
「解析不能な日付」は、期待される形式の正しい日付です。私のフォーマット文字列は、その正確な日付を解析するように設計されています。前述のように、電話を英語ロケールに切り替えると、問題なく動作します。同じコードです。アプリの実行中にロケールを切り替えてもエラーが発生し、ロケールを元に戻すと消えます。