7

在查看了几个现有的帖子后,我仍然无法让我的 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

区域设置和模式看起来不错。我哪里错了?

4

2 回答 2

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++ 的字符。但是,显然有一些东西,它现在正在工作。

感谢所有的帮助!

于 2011-06-10T06:08:00.803 回答
3

检查您输入的非打印字符,如制表符(而不是空格)等。有时它无法解析的原因与数字的格式无关,而与意外字符有很大关系(你可以' t 总是看到)。

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

于 2011-06-09T22:09:10.103 回答