2016-02-23 58 views
0

我有一个这种格式的CSV文件RES,2016-02-23_18:01:27,我想将这些值映射到具有StringCalendar类型属性的bean。在编写单元处理器方法时,有一种将Date解析为ParseDate()的方法。这是因为解析器正在返回对象,而我的Calendar对象正在返回我的bean。支持SuperCSV中的日历

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; 
} 

有没有原生支持

为了克服这个问题,我在bean作为下面创建一个重载的setter方法。我看了官方网站,这是一些例子。无法找到与Calendar相关的参考。如果SuperCSV没有本地支持,这是解决这个问题的最好方法吗?

回答

1

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

例如,您可以在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); 
    } 
} 

例如,

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