我的应用正在调用 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"))));
}
只要我的语言环境是英语,这就有效。
一旦我切换到德语或荷兰语(我的应用程序包含这两种语言的翻译,到目前为止我还没有尝试过任何其他语言),我就会收到这样的错误:
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)
“无法解析的日期”是正确的日期,采用预期的格式。我的格式字符串旨在解析该确切日期。如前所述,当我将手机切换到英语语言环境时,它工作得很好。相同的代码:即使我在应用程序运行时切换语言环境也会出现错误,当我切换回语言环境时错误消失。
最佳答案
如果您需要在特定语言环境中进行解析,请将其传递给 SimpleDateFormat
构造函数:
final SimpleDateFormat parser =
new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);
这意味着它将始终使用美国地区的日期和月份名称等。
关于Java,SimpleDateFormat 在德语中产生 ParseException。英文作品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6522087/