我遇到了一个Apache Camel Bindy数据格式的问题,用于从CSV文件解析日期字段。
CSV中的日期为 02/11/2015 03:34:49 PM
Bindy类中的格式注释为
@DataField(pos = 8,pattern="MM/dd/yyyy hh:mm:ss a")
private Date time;
获得以下异常
java.lang.IllegalArgumentException:提供的日期不适合 模式定义,位置:8,行:1 at org.apache.camel.dataformat.bindy.BindyCsvFactory.bind(BindyCsvFactory.java:213) 在 org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat.unmarshal(BindyCsvDataFormat.java:185) 在 org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:67)
如果CSV中的日期为 2/11/2015 03:34:49 PM
,而“月”字段中没有前面的0,则此功能正常。
我使用的是Camel 2.14.1。
我在这里做错了吗?
答案 0 :(得分:0)
来自DatePatternFormat.java的源代码:
public Date parse(String string) throws Exception {
Date date;
DateFormat df = this.getDateFormat();
ObjectHelper.notNull(this.pattern, "pattern");
// Check length of the string with date pattern
// To avoid to parse a string date : 20090901-10:32:30 when
// the pattern is yyyyMMdd
if (string.length() <= this.pattern.length()) {
// Force the parser to be strict in the syntax of the date to be
// converted
df.setLenient(false);
date = df.parse(string);
return date;
} else {
throw new FormatException("Date provided does not fit the pattern defined");
}
}
检查解析后的字符串是否小于模式。
然后将您的模式更改为MM/dd/yyyy hh:mm:ss aa
可以解决您的问题。