Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java SimpleDataFormat如何解析这个-';2009年3月31日上午10:04();?_Java_Simpledateformat - Fatal编程技术网

java SimpleDataFormat如何解析这个-';2009年3月31日上午10:04();?

java SimpleDataFormat如何解析这个-';2009年3月31日上午10:04();?,java,simpledateformat,Java,Simpledateformat,我正在使用SimpleDataFormat进行一些简单的验证,它运行良好,除了一件事: 当像'3/31/09 10:04 AM()(&^%^$'这样的值被传递给它时,不会引发ParseException。它只是忽略后缀/end。 有没有办法让它对这些输入抛出异常? 提前谢谢!试着打电话 指定日期/时间分析是否要宽松。使用宽松分析时,解析器可以使用试探法解释与此对象格式不完全匹配的输入。使用严格分析时,输入必须与此对象的格式匹配 还可以看一看javadocs for,其中添加了一些重点(我的) 该

我正在使用SimpleDataFormat进行一些简单的验证,它运行良好,除了一件事: 当像'3/31/09 10:04 AM()(&^%^$'这样的值被传递给它时,不会引发ParseException。它只是忽略后缀/end。 有没有办法让它对这些输入抛出异常?

提前谢谢!

试着打电话

指定日期/时间分析是否要宽松。使用宽松分析时,解析器可以使用试探法解释与此对象格式不完全匹配的输入。使用严格分析时,输入必须与此对象的格式匹配

还可以看一看javadocs for,其中添加了一些重点(我的)

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

所以,你需要检查索引位置,可能还有错误位置。比如

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
。否则,示例的格式将是month
03
。同样的道理:可能存在没有格式的日期是同构的。例如,在德语语言环境中,Mon由
EE
EEE
EEEE
解析,但前两个格式是
Mo
,最后一个格式是
Montag
。这必须仔细检查。感谢peter给出的好答案。这对我帮助很大。对于前导0的问题,我刚刚将其与一系列不同的模式进行比较。