Univocity - 如何动态提供日期格式
Univocity - how to provide date formats dynamically
我正在尝试使用 univocity 解析器验证项目中的日期字段。
我知道 univocity 中有自定义验证器和格式注释。但是我们需要在实现 bean 类.
时提供静态日期格式
@Format(formats = "yyyy-MM-dd")
private Date createdAt
我有一个特定要求,需要动态提供日期格式。
这意味着我需要将日期字段解析为字符串,然后在解析 csv 文件后根据 DateTimeFormatter 验证它们(post 验证器)。
有没有办法在运行时提供传递验证参数?
或者 univocity 是否支持在创建后处理所有 bean 的验证器?
谢谢!
有可能通过给处理器设置转换器:
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;
}
}
我正在尝试使用 univocity 解析器验证项目中的日期字段。
我知道 univocity 中有自定义验证器和格式注释。但是我们需要在实现 bean 类.
时提供静态日期格式@Format(formats = "yyyy-MM-dd")
private Date createdAt
我有一个特定要求,需要动态提供日期格式。 这意味着我需要将日期字段解析为字符串,然后在解析 csv 文件后根据 DateTimeFormatter 验证它们(post 验证器)。
有没有办法在运行时提供传递验证参数? 或者 univocity 是否支持在创建后处理所有 bean 的验证器?
谢谢!
有可能通过给处理器设置转换器:
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;
}
}