支持SuperCSV中的日历

时间:2016-02-23 12:49:26

标签: java csv calendar supercsv

我有一个格式为RES,2016-02-23_18:01:27的CSV文件,我希望将值映射到具有StringCalendar类型属性的bean。在编写单元处理器方法时,有一种方法可以将值解析为Date ParseDate()。这会导致错误,因为解析器返回Date对象,并且我的bean中有Calendar个对象。

为了解决这个问题,我在bean中创建了一个重载的setter方法,如下所示:

public void setDate(Date date) {
    this.date = new GregorianCalendar();
    this.date.setTime(date);
}

这是我的CellParser方法:

private static CellProcessor[] getProcessors() {
    final CellProcessor[] processors = new CellProcessor[] { 
         new StrRegEx("\\w{3}"), // string value check
         new ParseDate("yyyy-MM-dd_HH:mm:ss"), // date
    };
    return processors;
}

是否有本机支持。我查看了官方网站,这是一个例子。无法找到与Calendar相关的参考文献。如果SuperCSV没有原生支持,这是解决这个问题的最佳方法吗?

1 个答案:

答案 0 :(得分:2)

最简单的方法是编写自己的custom cell processor

例如,您可以在if (p_sys->b_first_frame && b_gotpicture) { if (AV_PICTURE_TYPE_I != frame->pict_type) { av_frame_unref(frame); break; } } 之后链接以下处理器,将其转换为ParseDate

Calendar

例如,

public class DateToCalendar extends CellProcessorAdaptor implements DateCellProcessor {

    public DateToCalendar() {
    }

    public DateToCalendar(final CellProcessor next) {
        super(next);
    }

    public Object execute(final Object value, final CsvContext context) {
        validateInputNotNull(value, context);

        if( !(value instanceof Date) ) {
            throw new SuperCsvCellProcessorException(Date.class, value, context, this);
        }

        Calendar result = Calendar.getInstance();
        result.setTime((Date) value);

        return next.execute(result, context);
    }
}