我想使用DateUtils.parseDate解析具有不同潜在格式的日期。似乎应该使用第一个解析器,即使它应该检测23/10/20142014/10/23之间的差异也是如此。

即使错误,它实际上也会解析日期,因此我什至无法捕捉到异常。我能怎么做?是 bug 吗? (commons-lang3-3.3.2)

这是一个代码片段

package snippet;

import java.text.ParseException;
import java.util.Date;

import org.apache.commons.lang3.time.DateUtils;

public class TestDateFormat {

    public static void main(String[] args) throws ParseException {

        Date d = DateUtils.parseDate("23/10/2014T12:34:22",
            new String[] {"yyyy/MM/dd'T'HH:mm:ss",
                "dd/MM/yyyy'T'HH:mm:ss"});

        System.out.println(d);
        //returns Tue Apr 05 12:34:22 CET 29 which is wrong
    }

}

最佳答案

您应该使用DateUtils.parseDateStrictly:

DateUtils#parseDateStrictly



在内部,它所做的是将falselenient属性设置为DateFormat:DateFormat.html#setLenient



例子:

   public static void main(String[] args) throws ParseException {
      Date d = DateUtils.parseDateStrictly("23/10/2014T12:34:22",
          new String[] {"yyyy/MM/dd'T'HH:mm:ss",
              "dd/MM/yyyy'T'HH:mm:ss"});

      System.out.println(d);
  }

10-06 14:54