首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SuperCSV中对日历的支持

SuperCSV中对日历的支持
EN

Stack Overflow用户
提问于 2016-02-23 12:49:26
回答 1查看 102关注 0票数 0

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

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

代码语言:javascript
复制
public void setDate(Date date) {
    this.date = new GregorianCalendar();
    this.date.setTime(date);
}

下面是我的CellParser方法:

代码语言:javascript
复制
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的本地支持,这是克服这个问题的最佳方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-24 09:09:50

最简单的方法是编写自己的自定义单元处理器

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

代码语言:javascript
复制
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);
    }
}

例如,

代码语言:javascript
复制
final CellProcessor[] processors = new CellProcessor[] { 
         new StrRegEx("\\w{3}"), // string value check
         new ParseDate("yyyy-MM-dd_HH:mm:ss", new DateToCalendar()) // date
    };
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35578057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档