Java 使用apache lang DateUtil的日期格式失败

Java 使用apache lang DateUtil的日期格式失败,java,apache-commons-dateutils,Java,Apache Commons Dateutils,我试图使用DateUtils将字符串格式的日期转换为日期。以下是我的预期日期格式 private static final String[] EXPECTED_DATE_FORMAT = {"yyyy-MM-dd","dd-MM-yyyy","dd-MMM-yyyy",}; 我根据以下值进行了测试 System.out.println(org.apache.commons.lang.time.DateUtils.parseDate("2019-05-18", EXPECTED_DATE_FOR

我试图使用
DateUtils
将字符串格式的日期转换为日期。以下是我的预期日期格式

private static final String[] EXPECTED_DATE_FORMAT = {"yyyy-MM-dd","dd-MM-yyyy","dd-MMM-yyyy",};
我根据以下值进行了测试

System.out.println(org.apache.commons.lang.time.DateUtils.parseDate("2019-05-18", EXPECTED_DATE_FORMAT));
System.out.println(org.apache.commons.lang.time.DateUtils.parseDate("18-05-2019", EXPECTED_DATE_FORMAT));
System.out.println(org.apache.commons.lang.time.DateUtils.parseDate("18-May-2019", EXPECTED_DATE_FORMAT));
我得到了以下结果

Sat May 18 00:00:00 IST 2019
Tue Nov 09 00:00:00 IST 23
Sat May 18 00:00:00 IST 2019
为什么第二个值“
18-05-2019
”与格式“
dd-MM-yyyy
”不匹配,并得到相同的结果?
我应该同时支持
dd-MM-yyyyy
yyy-MM-dd
的哪些更改?

您应该改用方法

这是由于
DateUtils.parseDate
内部使用了带有“宽松解析”的
SimpleDateFormat
SimpleDateFormat.setLenient(true))的
)。粗略地说,宽松解析意味着,如果字符串与模式不完全匹配,解析器将尝试试探性地“猜测”如何解释字符串以获得有意义的日期。 在您的示例中,第二个字符串失败,因为第一个模式被认为“足够好”可以使用,然后解析器会把事情搞砸


您可以使用
DateUtils.parseDateStrictly
禁用宽大处理。

这是由于
DateUtils.parseDate
在内部使用带有“宽大处理”的
SimpleDataFormat
SimpleDataFormat.setLenient(true)
)的
SimpleDataFormat。粗略地说,宽松解析意味着,如果字符串与模式不完全匹配,解析器将尝试试探性地“猜测”如何解释字符串以获得有意义的日期。
在您的示例中,第二个字符串失败,因为第一个模式被认为“足够好”可以使用,然后解析器会把事情搞砸


您可以使用
DateUtils.parsedatestrickly
禁用宽恕。

感谢lukas提供的详细信息
DateUtils.ParseDateStrightly
解决了这个问题。感谢lukas提供的详细信息
DateUtils.ParseDateStrightly
解决了这个问题。谢谢你Tomasz
DateUtils.parseDateStrightly
解决了您的问题
DateUtils.ParseDate严格地
解决了这个问题