java SimpleDateFormat如何解析这个 - '3/31/09 10:04 AM()(*& * ^ %% ^ $'?

时间:2011-05-03 14:17:17

标签: java simpledateformat

我正在使用SimpleDateFormat做一些简单的验证,它工作正常,除了一件事: 当值'3/31/09 10:04 AM()(& ^ %% ^''传递给它时,不会抛出ParseException。它只是忽略那个后缀/结尾。 有没有办法让它为这些输入抛出ParseException?

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以检查格式化的日期是否匹配。

SimpleDateFormat sdf = new SimpleDateFormat("M/dd/yy h:mm a");
Date date = sdf.parse(t);
String t2 = sdf.format(date);
if (!t2.equals(t))
    throw new ParseException("Not an exact match '" + t2 + "' != '" + t + "'", 0);

如果您只是想检查尾随文本

if (!t.endsWith("M"))
    throw new ParseException("Invalid format '" + t + "'", 0);

答案 1 :(得分:0)

尝试拨打setLenient(false)

  

指定日期/时间解析是否宽松。通过宽松的解析,解析器可以使用启发式来解释与该对象的格式不完全匹配的输入。通过严格的解析,输入必须与此对象的格式匹配。

还要看一下parse的javadocs,并加上一些重点(我的)......

  

该方法尝试解析从pos给出的索引开始的文本。如果解析成功,则在使用最后一个字符后的索引更新为索引(解析不一定使用所有字符直到字符串的结尾),并返回解析的日期。 更新的pos可用于指示此方法的下一次调用的起点。如果发生错误,则不改变pos的索引,将pos的错误索引设置为发生错误的字符的索引,并返回null。

所以,你需要检查索引pos和可能的错误pos。有点像...

if (pos.getIndex() == input.length()) { /* all looks good */