在Java中解析字符串中的不同日期格式

Ala*_*amu 5 java datetime date simpledateformat

我有一个字符串,可能包含以下任何格式的日期:

2001-01-05 (yyyy-mm-dd)
2001/01/05 (yyyy/mm/dd)
01/05/2001 (dd/mm/yyyy)
01-05-2001 (dd-mm-yyyy)
2001 january 5
2001 5 january
january 5 2001
5 january 2001
january 5
5 january
Run Code Online (Sandbox Code Playgroud)

我希望能够解析特定的字符串并从中提取Date对象.

我的方法如下:

String[] date_formats = {
                            "yyyy-MM-dd",
                            "yyyyy/MM/dd", 
                            "dd/MM/yyyyy",
                            "dd-MM-yyyy",
                            "yyyy MMM dd",
                            "yyyy dd MMM",
                            "dd MMM yyyy",
                            "dd MMM",
                            "MMM dd",
                            "dd MMM yyyy"};

String output_date = null;
for (String formatString : date_formats)
{
     try
     {    
         Date mydate = new SimpleDateFormat(formatString).parse(token);
         SimpleDateFormat outdate = new SimpleDateFormat("yyyyMMdd");
         output_date = outdate.format(mydate);
         break;
     }
     catch (ParseException e) {
         System.out.println("Next!");
     }
 }
Run Code Online (Sandbox Code Playgroud)

这似乎没有按预期工作.特别是2001年1月5日等日期.我该如何做呢?

Kay*_*man 6

使用SimpleDateFormat.setLenient(false).这样,它就不会尝试解析不是所需格式的日期.


JHS*_*JHS 1

您需要在date_formats数组中包含您预期将出现的格式类型的所有格式。

查看SimpleDateFormat javadocs

查看 javadoc 中的示例。

2001-01-05      - yyyy-MM-dd 
2001/01/05      - yyyy/MM/dd
01/05/2001      - dd/MM/yyyy 
01-05-2001      - dd-MM-yyyy 
2001 january 5  - yyyy MMMMM d
2001 5 january  - yyyy d MMMMM
january 5 2001  - MMMMM d yyyy 
5 january 2001  - d MMMMM yyyy
january 5       - MMMMM d
5 january       - d MMMMM
Run Code Online (Sandbox Code Playgroud)