繁体   English   中英

为什么SimpleDateFormat不会为无效格式抛出异常?

[英]Why SimpleDateFormat does not throw exception for invalid format?

import java.text.ParseException;

public class Hello {

    public static void main(String[] args) throws ParseException {
        System.out.println(new java.text.SimpleDateFormat("yyyy-MM-dd").parse("23-06-2015"));
    }
}

为什么这会返回Sun Dec 05 00:00:00 GMT 28我期待一个例外。

SimpleDateFormat的Javadoc有关于重复模式字母的说法:

数字:对于格式化,模式字母的数量是最小位数,较短的数字是零填充到此数量。 对于解析,除非需要分隔两个相邻字段,否则将忽略模式字母的数量

(强调我的)

因此, 对于解析"yyyy-MM-dd"相当于"yMd"

使用此模式, "23-06-2015"被解析为year = 23, month = 6, dayOfMonth = 2015

默认情况下,从0023年6月1日开始计算,并计算2015年前的日期,将您带到0028年12月5日。

您可以使用SimpleDateFormat.setLenient(false)更改此行为 - 禁用lenalent时,它将为超出范围的数字引发异常。 这在Calendar.setLenient()有适当的记录


请注意,对于Java 8中的新代码,避免使用旧的DateCalendar类是个好主意。 如果可以LocalDateTime.parse(CharSequence text, DateTimeFormatter formatter)请使用LocalDateTime.parse(CharSequence text, DateTimeFormatter formatter)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM