apache lang DateUtil使用日期格式失败

时间:2019-05-17 09:44:33

标签: 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_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-yyyyyyyy-MM-dd哪些变化?

2 个答案:

答案 0 :(得分:2)

您应该改用DateUtils#parseDateStrictly方法

答案 1 :(得分:2)

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

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