1

我的应用程序正在调用 Twitter 提要和博客提要,当然两者都包含发布日期。当我的手机设置为英语语言环境时,它可以工作,当我切换到荷兰语或德语时,它会失败。有问题的代码甚至不调用语言环境,输入值也独立于语言环境。

违规代码:

tweets 是一个 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)

“无法解析的日期”是正确的日期,采用预期的格式。我的格式字符串旨在解析该确切日期。如前所述,当我将手机切换到英语语言环境时,它工作得很好。这是相同的代码:即使我在应用程序运行时切换语言环境也会发生错误,并且当我切换回语言环境时会消失。

4

2 回答 2

4

如果您需要在特定语言环境中进行解析,请将其传递给SimpleDateFormat构造函数:

final SimpleDateFormat parser =
    new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.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 回答