2

我正在使用 SimpleDateFormat 进行一些简单的验证,它工作正常,除了一件事:当像'3/31/09 10:04 AM()( & ^%%^$'这样的值被传递给它时,不会抛出 ParseException。它只是忽略了 suffix/end 有没有办法让它为此类输入抛出 ParseException ?

提前致谢!

4

2 回答 2

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);
于 2011-05-03T14:24:34.047 回答
0

试着打电话setLenient(false)

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

还可以查看 javadocs 以进行解析,并添加一些重点(我的)...

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

因此,您需要检查索引 pos 以及可能的错误 pos。就像是...

if (pos.getIndex() == input.length()) { /* all looks good */
于 2011-05-03T14:20:18.413 回答