1

我需要将字符串解析为日期,但不知道字符串将采用哪种模式。这类似于问题如何在不知道格式的情况下将字符串转换为日期?.

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

示例 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”的结果很奇怪。

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

4

2 回答 2

1

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

2013-09-30:Mon Sep 30 00:00:00 EDT 2013
30-09-2013:Mon Sep 30 00:00:00 EDT 2013
于 2013-10-09T11:17:10.227 回答
0

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

写日期的几个例子是:DD-MM-YYYY, MM-DD-YYYY, DD/MM/YYYY, MM/DD/YYYY, MM/DD/YY, DD/MM/YY. 对于这多种类型的日期,您能找到任何共同的模式吗?

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

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

于 2013-10-09T10:55:16.760 回答