为什么解析这个日期字符串会抛出一个不可解析的日期异常?

时间:2008-10-08 20:18:42

标签: java date

我正在使用模式EEE MM/dd hh:mma的SimpleDateFormat,传递日期String Thu 10/9 08:15PM并且它抛出了一个Unparseable日期异常。为什么?我之前使用过SimpleDateFormat的各种模式,所以我对它的使用非常熟悉。也许我错过了很长时间盯着它看的东西。

另一种可能性是时髦(技术术语)空白。上下文是一个屏幕抓取应用程序,我正在使用HtmlCleaner来整理凌乱的HTML。虽然我发现HtmlCleaner整体上非常好,但我注意到奇怪的问题是字符看起来像空格,但是例如用StringTokenizer不能识别。我大部分时间都在努力解决这个问题,并没有深入研究字符编码或其他任何类似的东西,但我开始怀疑。

3 个答案:

答案 0 :(得分:2)

要测试它是否为日期格式,请编写一个测试类来证明它。对于这些类型的东西,我喜欢使用bsh(beanshell)。这是我的测试:

sdf = new java.text.SimpleDateFormat("EEE MM/dd hh:mma");
System.out.println(sdf.format(sdf.parse("Thu 10/9 08:15PM")));

哪个输出:10月10日星期五08:15

所以,至少在我的jdk / jre版本(1.6)中,格式字符串似乎工作得很好。我认为下一步是确保你正在处理的字符串正是你认为的那样。您可以在代码中添加日志记录,并将输入字符串转储到日志文件中吗?然后你可以在一个漂亮的文本编辑器中查看它,在测试类中运行它,或者在十六进制编辑器中查看它以确保它只是普通文本。

祝你好运!

答案 1 :(得分:2)

这里的第一个问题是关于StackOverFlow的,所以我不确定解决这个问题的正确方法是什么。大多数答案都在Eric的回答中。

根本原因是日期字符串中的'空格'字符未被识别。它是'A0'的十六进制字符,这是一个不间断的空间。我最终将日期字符串转换为char数组,使用Character.isSpaceChar()检查字符,并用“”char替换那些返回true的字符。

答案 2 :(得分:1)

请尝试使用此模式:

EEE MM/d hh:mma

区别在于单d而不是双dd,因为您的日期是10/9而不是10/09。