我正在使用SimpleDateFormat做一些简单的验证,它工作正常,除了一件事: 当值'3/31/09 10:04 AM()(& ^ %% ^''传递给它时,不会抛出ParseException。它只是忽略那个后缀/结尾。 有没有办法让它为这些输入抛出ParseException?
提前致谢!
答案 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)
指定日期/时间解析是否宽松。通过宽松的解析,解析器可以使用启发式来解释与该对象的格式不完全匹配的输入。通过严格的解析,输入必须与此对象的格式匹配。
还要看一下parse的javadocs,并加上一些重点(我的)......
该方法尝试解析从pos给出的索引开始的文本。如果解析成功,则在使用最后一个字符后
的索引更新为索引(解析不一定使用所有字符直到字符串的结尾),并返回解析的日期。 更新的pos可用于指示此方法的下一次调用的起点。如果发生错误,则不改变pos的索引,将pos的错误索引设置为发生错误的字符的索引,并返回null。
所以,你需要检查索引pos和可能的错误pos。有点像...
if (pos.getIndex() == input.length()) { /* all looks good */