java - SuperCSV 对日历的支持

标签 java csv calendar supercsv

我有一个采用这种格式 RES,2016-02-23_18:01:27 的 CSV 文件,我想将这些值映射到一个具有 String日历类型属性。在编写单元处理器方法时,有一个将值解析为 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;
}

有没有原生支持。我查看了官方网站及其示例。无法找到与日历相关的引用。如果 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
    };

关于java - SuperCSV 对日历的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35578057/

相关文章:

java - 在 aws 服务器上启动 tomcat 8 的问题

java - 客户端/服务器——服务器可能会改变,如何将其抽象掉?

csv - 在 PowerShell 中将 Csv 的一行拆分为多行

calendar - Javascript 库创建日历 uri/链接到 Google、Yahoo、Outlook、iCal?

java - Double.MIN_VALUE 和 Double.MAX_VALUE 之间的随机 double ?

java - boolean 值不变

php - 将 CSV 文件加载到 MYSQL 数据库而不导入行

csv - 用作样本数据的纬度/经度生成

java - 将时间从 UTC 转换回指定的时区

android - 如何为日历填充 gridview?