OpenCSV错误的日期格式

时间:2018-07-03 12:56:46

标签: java date opencsv

我正在使用openCSV的CsvToBean类。该豆具有日期字段。

@CsvDate(value = "yyyy-MM-dd")
@CsvBindByPosition(position = 8)
private Date startDate;

我正在通过传递值“ 2018-25-02 ”来进行否定测试,但是它越来越 转换为 2020年1月2日星期四格林尼治标准时间而没有引发任何问题。

2 个答案:

答案 0 :(得分:7)

OpenCSV 5

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;