0

我将 SimpleDateFormat 与模式一起使用EEE MM/dd hh:mma,传入日期字符串Thu 10/9 08:15PM,它抛出了一个不可解析的日期异常。为什么?我以前使用过各种模式,SimpleDateFormat所以我对它的用法相当熟悉。也许我因为盯着它太久而错过了一些明显的东西。

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

4

3 回答 3

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")));

哪个输出:Fri 10/09 08:15PM

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

祝你好运!

于 2008-10-08T20:48:39.273 回答
2

StackOverFlow 上的第一个问题,所以我不确定将其标记为已解决的正确方法是什么。大多数答案都在 Eric 答案的评论中。

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

于 2008-10-09T16:59:33.400 回答
1

试试这个代替你的模式:

EEE MM/d hh:mma

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

于 2008-10-08T20:20:55.677 回答