使用不同的格式/模式解析字符串到目前为止

我需要解析一个字符串到一个日期,但没有事先知道字符串将在哪个模式。这类似于如何在不知道格式的情况下将字符串转换为日期的问题? 。

为了解决这个问题,我采用了几种模式来测试结果。 但是,我得到的有点奇怪。

例1:

import java.util.Date; import org.apache.commons.lang3.time.DateUtils; public Date extractDate(String dateStr) { String [] datePatterns = {"yyyy-MM-dd", "dd-MM-yyyy"}; Date date = null; try { date = DateUtils.parseDate(dateStr, datePatterns); } catch (Exception except) { except.printStackTrace(); } return date; } public static void main(String[] args) throws Exception { System.out.println ("2013-09-30:" + extractDate("2013-09-30") ); System.out.println ("30-09-2013:" + extractDate("30-09-2013") ); } 

这给出了:

  2013-10-30:Wed Oct 30 00:00:00 EAT 2013 30-09-2013:Mon Mar 05 00:00:00 EAT 36 

解析’30 -09-2013’的结果显然很奇怪。

例2:这里我只切换模式

  String [] datePatterns = {"dd-MM-yyyy", "yyyy-MM-dd"}; 

这给出了:

  2013-10-30:Mon Mar 05 00:00:00 EAT 36 30-09-2013:Mon Sep 30 00:00:00 EAT 2013 

在示例2中,解析“2013-10-30”的结果很奇怪。

如何使用不同的格式/模式解析日期字符串,以便生成的日期是正确的?

更新以使用parseDateStrictly 。 当我这样做时,我得到以下输出:

 2013-09-30:Mon Sep 30 00:00:00 EDT 2013 30-09-2013:Mon Sep 30 00:00:00 EDT 2013 

我的回答是一样的。 如果没有任何格式的先验知识,您无法解析日期。

写日期的几个例子是: DD-MM-YYYYMM-DD-YYYYDD/MM/YYYYMM/DD/YYYYMM/DD/YYDD/MM/YY 。 只有这么多类型的日期可以找到任何常见的模式吗?

没有! 在不知道用户输入的格式的情况下,您无法解析它。

如果您想出模式匹配,日期如10-09-2010也与MM-DD-YYYY格式和DD-MM-YYYY格式匹配。 在这里你会遇到问题