Camel Bindy日期格式解组问题

时间:2015-02-20 00:34:51

标签: apache-camel bindy

我遇到了一个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。

我在这里做错了吗?

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