Java, SimpleDateFormat создает ParseException на немецком языке. Работает на английском - PullRequest
1 голос
/ 29 июня 2011

Мое приложение вызывает канал Twitter и канал блога, оба, конечно, содержат дату публикации. Когда мой телефон настроен на английский язык, он работает, когда я переключаюсь на голландский или немецкий язык, он не работает Данный код даже не вызывает языковой стандарт, и входные значения также не зависят от языкового стандарта.

Код обидчика:

твиты - это JSONObject, содержащий полный канал Twitter.

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"))));
}

Это работает до тех пор, пока у меня английский язык.

Как только я переключаюсь на немецкий или голландский (мое приложение содержит переводы для этих двух языков, я еще не пробовал ни одного другого), я получаю ошибку, подобную этой:

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)

«Непарсируемая дата» - это правильная дата в ожидаемом формате. Моя строка формата предназначена для анализа этой точной даты. И, как я уже сказал, когда я переключаю свой телефон на английский язык, он работает просто отлично. Это тот же код: ошибка возникает, даже когда я переключаю языковой стандарт во время работы приложения, и исчезает, когда я переключаю обратно языковой стандарт.

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Если вам нужно проанализировать конкретную локаль, передайте ее в конструктор SimpleDateFormat:

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

Это означает, что он всегда будет использовать локали США для названия дня и месяца и т. Д.

1 голос
/ 29 июня 2011

Вы пробовали:

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