我想使用DateUtils.parseDate
解析具有不同潜在格式的日期。似乎应该使用第一个解析器,即使它应该检测23/10/2014
和2014/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
在内部,它所做的是将false
的lenient
属性设置为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);
}