java SimpleDataFormat如何解析这个-';2009年3月31日上午10:04();?
我正在使用SimpleDataFormat进行一些简单的验证,它运行良好,除了一件事: 当像'3/31/09 10:04 AM()(&^%^$'这样的值被传递给它时,不会引发ParseException。它只是忽略后缀/end。 有没有办法让它对这些输入抛出异常? 提前谢谢!试着打电话 指定日期/时间分析是否要宽松。使用宽松分析时,解析器可以使用试探法解释与此对象格式不完全匹配的输入。使用严格分析时,输入必须与此对象的格式匹配 还可以看一看javadocs for,其中添加了一些重点(我的) 该方法尝试从pos给定的索引开始解析文本。如果解析成功,则pos的索引将更新为使用的最后一个字符后的索引(解析不一定使用字符串末尾的所有字符),并返回解析的日期。更新后的pos可用于指示下一次调用此方法的起点。如果发生错误,则不会更改pos的索引,pos的错误索引将设置为发生错误的字符的索引,并返回null 所以,你需要检查索引位置,可能还有错误位置。比如java SimpleDataFormat如何解析这个-';2009年3月31日上午10:04();?,java,simpledateformat,Java,Simpledateformat,我正在使用SimpleDataFormat进行一些简单的验证,它运行良好,除了一件事: 当像'3/31/09 10:04 AM()(&^%^$'这样的值被传递给它时,不会引发ParseException。它只是忽略后缀/end。 有没有办法让它对这些输入抛出异常? 提前谢谢!试着打电话 指定日期/时间分析是否要宽松。使用宽松分析时,解析器可以使用试探法解释与此对象格式不完全匹配的输入。使用严格分析时,输入必须与此对象的格式匹配 还可以看一看javadocs for,其中添加了一些重点(我的) 该
if (pos.getIndex() == input.length()) { /* all looks good */
您可以检查格式化日期是否匹配
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);
这也是我的第一个想法,但我尝试了一下,发现这不起作用。@musiKk:用更多的内容更新了我的答案;不介意评论吗?最好在模式中使用
M
,而不是MM
。否则,示例的格式将是month03
。同样的道理:可能存在没有格式的日期是同构的。例如,在德语语言环境中,Mon由EE
或EEE
或EEEE
解析,但前两个格式是Mo
,最后一个格式是Montag
。这必须仔细检查。感谢peter给出的好答案。这对我帮助很大。对于前导0的问题,我刚刚将其与一系列不同的模式进行比较。