SimpleDateFormat:不可解析的日期异常

时间:2011-06-09 22:00:39

标签: java android date-format simpledateformat parseexception

在查看几个现有帖子之后,我仍然无法使我的SimpleDateFormat解析器工作。这是代码:

SimpleDateFormat df = new SimpleDateFormat(
    "EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
try {
    volcanoListDate = df.parse(currentValue);
} catch (ParseException e) {
    Log.d("DEBUG", e.toString());
    Log.d("DEBUG", currentValue);
}

我总是以ParseException结束。以下是调试消息的输出:

  

06-09 23:52:17.478:DEBUG / DEBUG(2436):java.text.ParseException:Unparseable date:
  06-09 23:52:17.478:DEBUG / DEBUG(2436):Wed,08 Jun 2011 03:23:55 -0500

设置了区域设置,模式看起来没问题。我哪里错了?

2 个答案:

答案 0 :(得分:4)

以下是解决方案:

            SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
        try {
            volcanoListDate = df.parse(currentValue.replaceAll("\\p{Cntrl}", ""));
        } catch (ParseException e) {
            Log.d("VOLCANO_DEBUG", e.toString());
            Log.d("VOLCANO_DEBUG", currentValue);
        }

重要的变化是 .replaceAll(“\\ p {Cntrl}”,“”),它会从已解析的字符串中删除控制字符。 奇怪的是,我没有在字符串来自的xml中看到任何带有Notepad ++的字符。然而,显然有一些东西现在正在发挥作用。

感谢您的帮助!

答案 1 :(得分:3)

检查您的输入是否有非打印字符,如标签(而不是空格)等。有时它无法解析的原因与数字的格式化有很大关系,与意外事件有很大关系字符(你不能总是看到)。

考虑到有些人已经报道“为我工作”(@Thanks Bozho!)我强烈怀疑你的输入字符串中有不可打印的字符。谁知道,你可能在某处嵌入了垂直标签!