首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Univocity -如何动态提供日期格式

Univocity -如何动态提供日期格式
EN

Stack Overflow用户
提问于 2021-02-20 00:37:23
回答 1查看 147关注 0票数 4

我正在尝试使用univocity解析器验证项目中的日期字段。

我知道univocity中有自定义验证器和格式注释。但在实现bean类时,我们需要提供静态日期格式。

代码语言:javascript
复制
@Format(formats = "yyyy-MM-dd")
private Date createdAt

我有一个特定的要求,我需要动态地提供日期格式。这意味着我需要将日期字段解析为字符串,然后在解析csv文件(类似post验证器)后,根据DateTimeFormatter对它们进行验证。

有没有办法在运行时传递验证参数?或者univocity是否支持在创建后处理所有bean的验证器?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 19:30:16

可以通过将转换器设置到处理器来实现:

代码语言:javascript
复制
import java.io.ByteArrayInputStream;
import java.util.Date;
import java.util.List;

import com.univocity.parsers.annotations.Parsed;
import com.univocity.parsers.common.processor.BeanListProcessor;
import com.univocity.parsers.conversions.Conversions;
import com.univocity.parsers.csv.CsvParser;
import com.univocity.parsers.csv.CsvParserSettings;

public class DynamicDateFormatParser {
    public static void main(String[] args) {
        BeanListProcessor<CsvRecord> rowProcessor = new BeanListProcessor<CsvRecord>(CsvRecord.class);
        rowProcessor.convertIndexes(Conversions.toDate("dd.MM.yyyy")).set(1);

        CsvParserSettings settings = new CsvParserSettings();
        settings.setProcessor(rowProcessor);

        CsvParser parser = new CsvParser(settings);

        parser.parse(new ByteArrayInputStream("foo,31.12.2021,bar".getBytes()));

        List<CsvRecord> allRows = rowProcessor.getBeans();

        // 1 rows
        System.out.println(allRows.size() + " rows");
        
        // Fri Dec 31 00:00:00 CET 2021
        System.out.println(allRows.get(0).field2);
    }

    static class CsvRecord {
        @Parsed(index = 0)
        String field1;

        @Parsed(index = 1)
        Date field2;

        @Parsed(index = 3)
        String field3;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66281523

复制
相关文章

相似问题

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