1

我遇到了从 CSV 文件解析日期字段的 Apache Camel Bindy 数据格式问题。

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 在 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,并且在 Month 字段中没有前面的 0,则它可以工作。

我正在使用骆驼 2.14.1。

我在这里做错什么了吗?

4

1 回答 1

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应该可以解决您的问题。

于 2015-02-22T21:44:44.120 回答