Java 在SuperSV中支持日历

Java 在SuperSV中支持日历,java,csv,calendar,supercsv,Java,Csv,Calendar,Supercsv,我有一个这种格式的CSV文件RES,2016-02-23_18:01:27,我想将这些值映射到一个具有String和Calendar类型属性的bean。在编写cell processor方法时,有一种方法可以将值解析为Date作为ParseDate()。在这里,这会导致一个错误,因为解析器返回Date对象,而我的bean中有Calendar对象 为了克服这个问题,我在bean中创建了一个重载setter方法,如下所示: public void setDate(Date date) { t

我有一个这种格式的CSV文件
RES,2016-02-23_18:01:27
,我想将这些值映射到一个具有
String
Calendar
类型属性的bean。在编写cell processor方法时,有一种方法可以将值解析为
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;
}

是否有任何本地支持。我看了官方网站和它的例子。无法找到与
日历相关的引用。如果SuperSV没有本机支持,这是解决此问题的最佳方法吗?

最简单的方法是编写自己的

例如,您可以在
ParseDate
之后链接以下处理器,将其转换为
日历

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);
    }
}
比如说,

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

最简单的方法是自己写

例如,您可以在
ParseDate
之后链接以下处理器,将其转换为
日历

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);
    }
}
比如说,

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