我正在使用openCSV的CsvToBean类。该豆具有日期字段。
@CsvDate(value = "yyyy-MM-dd")
@CsvBindByPosition(position = 8)
private Date startDate;
我正在通过传递值“ 2018-25-02 ”来进行否定测试,但是它越来越 转换为 2020年1月2日星期四格林尼治标准时间而没有引发任何问题。
答案 0 :(得分:7)
OpenCSV 5.x onwards本机支持Java 8 java.time API。
引用文档:
包括对Java 8 Time API的全面支持。包括与实现
TemporalAccessor
的所有JDK类型之间的转换。
因此,以下内容就足够了:
@CsvDate(value = "yyyy-MM-dd")
@CsvBindByPosition(position = 8)
private LocalDate startDate;
答案 1 :(得分:2)
您可以为Java 8 LocalDate创建自己的自定义转换器,例如
public class LocalDateConverter extends AbstractBeanField {
@Override
protected Object convert(String s) throws CsvDataTypeMismatchException, CsvConstraintViolationException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate parse = LocalDate.parse(s, formatter);
return parse;
}
}
然后,您可以像这样对课程进行注释:
@CsvCustomBindByPosition(position = 8, converter = LocalDateConverter.class)
private LocalDate startDate;