我正在使用模式EEE MM/dd hh:mma
的SimpleDateFormat,传递日期String Thu 10/9 08:15PM
并且它抛出了一个Unparseable日期异常。为什么?我之前使用过SimpleDateFormat
的各种模式,所以我对它的使用非常熟悉。也许我错过了很长时间盯着它看的东西。
另一种可能性是时髦(技术术语)空白。上下文是一个屏幕抓取应用程序,我正在使用HtmlCleaner来整理凌乱的HTML。虽然我发现HtmlCleaner整体上非常好,但我注意到奇怪的问题是字符看起来像空格,但是例如用StringTokenizer不能识别。我大部分时间都在努力解决这个问题,并没有深入研究字符编码或其他任何类似的东西,但我开始怀疑。
答案 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。