我正在使用AM()(&^%%^$'进行一些简单的验证,它工作得很好,除了一件事:当像'3/31/09 10:04这样的值被传递给它时,不会抛出ParseException。它只是忽略了后缀/结束。是否有办法使它为这样的输入抛出ParseException?
提前感谢!
发布于 2011-05-03 14:24:34
您可以检查格式化日期是否匹配。
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);发布于 2011-05-03 14:20:18
尝试调用setLenient(false)
指定日期/时间解析是否宽松。通过宽松的解析,解析器可以使用启发式来解释不完全匹配该对象格式的输入。通过严格的解析,输入必须与该对象的格式相匹配。
还可以查看一下解析的javadocs,并添加了一些重点(我的).
该方法试图解析从pos提供的索引开始的文本。如果解析成功,那么pos的索引将在最后使用的字符之后更新到索引(解析不一定使用到字符串末尾的所有字符),并且返回解析的日期。更新后的pos可用于指示下一次调用此方法的的起始点。如果发生错误,则pos的索引不会更改,将pos的错误索引设置为发生错误的字符的索引,并返回null。
因此,您需要检查索引pos以及可能的错误pos。就像..。
if (pos.getIndex() == input.length()) { /* all looks good */https://stackoverflow.com/questions/5870856
复制相似问题