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