支持 SuperCSV 中的日历
support for Calendar in SuperCSV
我有一个格式为 RES,2016-02-23_18:01:27
的 CSV 文件,我想将值映射到具有 String
和 Calendar
类型属性的 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 没有本机支持,这是解决此问题的最佳方法吗?
最简单的方法是自己编写 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
};
我有一个格式为 RES,2016-02-23_18:01:27
的 CSV 文件,我想将值映射到具有 String
和 Calendar
类型属性的 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 没有本机支持,这是解决此问题的最佳方法吗?
最简单的方法是自己编写 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
};