【发布时间】:2014-05-26 15:39:15
【问题描述】:
我想解析一些日期.. 我用以下代码做到这一点:
ULocale tmpLocale=Locale.US
try {
return parse(date, "yyyy-MM-dd HH:mm:ss.SSS",tmpLocale);
} catch (ParseException e1) {
try {
return parse(date, "dd.MM.yyyy-HH:mm",tmpLocale);
} catch (ParseException e2) {
try {
return parse(date, "dd.MM.yyyy",tmpLocale);
} catch (ParseException e3) {
try {
return parse(date, "yyyy-MM-dd",tmpLocale);
} catch (ParseException e4) {
try{
return parse(date, "yyyyMMdd",tmpLocale);
}catch(ParseException e5){
throw new DefaultDateParserException();
}
}//e4 catch
}//e3 catch
}//e2 Catch
} //e1 Catch
解析是通过这个方法完成的:
private static DateValue parse(String value, String pattern,ULocale locale) throws ParseException {
UFormat uFormat = new SimpleDateFormat(pattern, locale);
((SimpleDateFormat) uFormat).setTimeZone(TimeZone.getTimeZone("GMT"));
((SimpleDateFormat) uFormat).setLenient(false);
Date date = ((SimpleDateFormat) uFormat).parse(value);
GregorianCalendar gc = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
gc.setTime(date);
return new DateValue(gc);
}
为了测试是否抛出异常,我使用这个测试值“2011.10.01”...我上面的代码中没有任何模式应该与此匹配,但是异常 e4 “解析(日期,“yyyyMMdd”,tmpLocale);“确实解析了我的日期,为什么会这样? “yyyyMMdd”不应该匹配这个日期“2011.10.01”!我怎样才能告诉我的解析器他应该只解析我的日期,它的模式完全匹配?
希望你明白我的意思。
编辑:问题似乎是我使用的 IBM 的 UFormat: 但我不知道为什么它不在那里工作。 @Kyllopardiun 如果你下载这个包 http://mvnrepository.com/artifact/com.ibm.icu/icu4j/4.0.1
并将您的导入更改为:
import java.text.ParseException;
import java.util.Date;
import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.GregorianCalendar;
import com.ibm.icu.util.TimeZone;
import com.ibm.icu.util.ULocale;
和 Local.US 到 ULocale.US
那么它不会抛出异常!
【问题讨论】:
-
我刚刚在这里测试了你的代码,“2011.10.01”一直通过异常 e5。
标签: java parsing date simpledateformat date-parsing