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

标签 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 哪些更改?

最佳答案

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

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

关于java - 使用 apache lang DateUtil 的日期格式失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56183764/

相关文章:

java - FirebaseRecyclerAdapter DatabaseException : Can't convert object of type java. lang.String 输入帖子

java - Apache DateUtils 截断月份中的某一天

java - 在 Java 中将日期字符串转换为纪元

java - 将 java.util.Date 舍入到一天结束

java - Google Glass OAuth无效客户端

java - Mockito:如何匹配 String 和 List<String> 参数

java - 每次用 java 检查一个框时更新所有 TextFields

java - Android Studio 中的 ScrollView,同时使用上拉刷新

java - Apache DateUtils 截断一周