Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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 为什么我可以解析;2015-18-32“;用SimpleDataFormat?_Java_Simpledateformat_Date Formatting - Fatal编程技术网

Java 为什么我可以解析;2015-18-32“;用SimpleDataFormat?

Java 为什么我可以解析;2015-18-32“;用SimpleDataFormat?,java,simpledateformat,date-formatting,Java,Simpledateformat,Date Formatting,我试图回答一个问题,我准备了一个小示例,希望在代码运行后提供一些成功和错误消息: 代码 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // correct format in string but totally wrong data for a date. String curDate = "2015-18-32"; Date parsedDate = null; try { parsedDate = for

我试图回答一个问题,我准备了一个小示例,希望在代码运行后提供一些成功和错误消息:

代码

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// correct format in string but totally wrong data for a date.
String curDate = "2015-18-32";
Date parsedDate = null;
try {
    parsedDate = format.parse(curDate);
} catch (ParseException e) {}

System.out.println(parsedDate);
输出

2016年7月2日星期六00:00:00 CEST

我知道结果日期仅为有效日期(2015-12-31),加上6个月零1天,但这对我来说并不正确。我是否误解了简化格式

  • 这段代码不应该给出异常或错误吗

来自文档:

默认情况下,解析是宽松的:如果输入不是此对象的format方法使用的格式,但仍然可以作为日期进行解析,则解析成功。客户可能会通过调用setLenient(false)来坚持严格遵守格式

这实际上增加了6个月零2天的日期,超出了月份和月份天数的范围,截止到2016年7月2日


另请参见下面关于
java.util.Calendar
Lenence的评论

IIRC
SimpleDataFormat
默认情况下是宽松的,即它只是滚动并添加额外的天数和月份。它是使用启发式的宽松解析:。此功能可以通过
df.setLenient(false)
关闭。请参见。只是想知道:您之前做了多少研究?更严格地说,基础日历实例是一个lenient:“Calendar有两种模式用于解释日历字段,宽松和非宽松。当日历处于宽松模式时,它接受的日历字段值的范围比它产生的范围更广。当日历重新计算get()返回的日历字段值时,所有日历字段都将被规范化。例如,宽大的GregorianCalendar将月份==1月,月中日==32解释为2月1日。“@jwenting谢谢,为你的评论添加了参考。@jwenting和Mena,谢谢,我必须翻译你的答案才能理解lenient…:S,我的问题是英语,没有误解代码…)@JordiCastilla
lenitivo
放纵
?或
放纵
?:)我知道放纵是的,因为放纵e在西班牙语中也是一个词…但lenitivo或类似的词在本例中不存在…该词在西班牙语中没有此含义…请检查