java - 使用不同的格式/模式解析迄今为止的字符串

标签 java string date apache-commons

我需要将字符串解析为日期,但事先不知道该字符串将采用哪种模式。这类似于问题 How to convert String to Date without knowing the format? .

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

示例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

关于java - 使用不同的格式/模式解析迄今为止的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19269888/

相关文章:

python - 今年的最后一周归因于下一年

sql - 如何仅获取年份作为 SQL Server 中日期/日期时间的一部分

python - 如何像日期一样在 python 中格式化日期时间?

java - JAX-WS:在另一个类注释的方法中使用参数

java - 如何使用正则表达式提取字符串的电话号码?

java - 与 String 和实例混淆

Java 字符串导入 java.lang.String

java - 如何使用eclipse在java中打印带下划线的字符串

java - Android 非法状态异常 : The specified child already has a parent

java - 写时读锁