1

私のアプリは 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)

「解析不能な日付」は、期待される形式の正しい日付です。私のフォーマット文字列は、その正確な日付を解析するように設計されています。前述のように、電話を英語ロケールに切り替えると、問題なく動作します。同じコードです。アプリの実行中にロケールを切り替えてもエラーが発生し、ロケールを元に戻すと消えます。

4

2 に答える 2

4

特定のロケールで解析する必要がある場合は、それをSimpleDateFormatコンストラクターに渡します。

final SimpleDateFormat parser =
    new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);

つまり、日や月の名前などには常に US ロケールが使用されます。

于 2011-06-29T14:16:18.253 に答える
1

やってみました:

SimpleDateFormat parser = 
    new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy",Locale.getDefault());
于 2011-06-29T14:27:09.923 に答える