dao*_*dac 4 java parsing date apache-commons
我想解析具有不同潜在格式的日期DateUtils.parseDate.看来使用第一语法分析器,即使它应该检测之间的差异23/10/2014和2014/10/23.
它实际上解析了日期,即使它是错误的,所以我甚至无法捕获异常.我能怎么做?这是一个错误吗?(公地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
}
}
Run Code Online (Sandbox Code Playgroud)
你应该使用DateUtils.parseDateStrictly:
通过尝试各种不同的解析器来解析表示日期的字符串.
解析将依次尝试每个解析模式.如果解析整个输入字符串,则认为解析成功.如果没有解析模式匹配,则抛出ParseException.
解析器严格解析 - 它不允许诸如"February 942,1996"之类的日期.
在内部,它所做的是设置使用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);
}
Run Code Online (Sandbox Code Playgroud)