Java,SimpleDateFormat 在德语中产生 ParseException。英文作品

标签 java android locale date-parsing

我的应用正在调用 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/

相关文章:

php - 所有语言环境及其短代码的列表?

java - 在 JavaFX 中启用/禁用按钮

java - 如何解析 JDBC url 以获取主机名、端口等?

java - 代号一布局问题

python - 为什么我必须做 `sys.stdin = codecs.getreader(sys.stdin.encoding)(sys.stdin)` ?

php - 进行多种语言的翻译

java - JFileChooser if/else 语句遇到问题

java - 在 Android 应用程序中将评论文本包装在用户名下方

android - 获取图片的Drawable路径

c# - Linphone SDK 集成在 Xamarin Android 中返回未知程序集