小编典典

为什么Java的SimpleDateFormat会对此进行解析

java

嗨,我有一个使用自定义格式字符串设置的简单日期格式:MMddyy

我给它解析以下值:4 1 01

我认为它不应该因为空格而解析,但是“简单日期格式”会返回日期

0001AD年4月4日

有什么想法吗?


阅读 188

收藏
2020-11-19

共1个答案

小编典典

这是预期的行为-您告诉DateFormat对象期望日期的6个字符的String表示形式,这就是您传递的内容。对空格进行了解析。但是,如果您使用“
4x1x01”,则会出现错误。请注意,解析时,宽大处理默认为true,例如

DateFormat df = new SimpleDateFormat("MMddyy");
Date date = df.parse("4 1 01"); // runs successfully (as you know)

DateFormat df = new SimpleDateFormat("MMddyy");
Date date = df.parse("41 01"); // 5 character String - runs successfully

DateFormat df = new SimpleDateFormat("MMddyy");
df.setLenient(false);
Date date = df.parse("41 01"); // 5 character String - causes exception

DateFormat df = new SimpleDateFormat("MMddyy");
Date date = df.parse("999999"); // 6 character String - runs successfully

DateFormat df = new SimpleDateFormat("MMddyy");
df.setLenient(false);
Date date = df.parse("999999"); // 6 character String - causes exception

当宽大处理设置为true(默认行为)时,解析将尝试解密无效的输入,例如,第31天的第35天变为下个月的第4天。

2020-11-19