1

我试图将字符串格式的日期转换为日期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-yyyy和支持哪些更改yyyy-MM-dd

4

2 回答 2

2

您应该改用DateUtils#parseDateStrictly方法

于 2019-05-17T10:11:41.397 回答
2

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

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

于 2019-05-17T10:18:25.663 回答