为什么字符串'35/35/1985`解析为'Sat Dec 05 00:00:00 IST 1987`日期对象?

emi*_*lly 2 java date

public static void main(String[] args) throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
    String dateStr = "35/35/1985";
    Date date = sdf.parse(dateStr);
Run Code Online (Sandbox Code Playgroud)

我期待运行时异常,如日期分析异常,但返回日期对象是 Sat Dec 05 00:00:00 IST 1987

通过什么逻辑字符串35/35/1985解析到目前为止Sat Dec 05 00:00:00 IST 1987

更新: -如果我设置setLenient(false),它会抛出异常.但是,如果我通过35/35/1985解析到目前为止的逻辑字符串,它是真的Sat Dec 05 00:00:00 IST 1987吗?

Jör*_*ink 5

public static void main(String[] args) throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
    String dateStr = "35/35/1985";
    Date date = sdf.parse(dateStr);
Run Code Online (Sandbox Code Playgroud)

回答你的"逻辑背后"问题:嗯,它将被解析为

xx.xx.1985
-> set / add 35 Months (xx.35.1982 -> xx.11.1987)
-> set / add 35 Days (35.11.1987 -> 05.12.1987)
Run Code Online (Sandbox Code Playgroud)

如果您不想要此行为,请将lenient设置为false:http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#setLenient%28boolean%29