OpenCSV错误的日期格式

Cha*_*hra 1 java date opencsv

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

@CsvDate(value = "yyyy-MM-dd")
@CsvBindByPosition(position = 8)
private Date startDate;
Run Code Online (Sandbox Code Playgroud)

我正在通过传递值“ 2018-25-02 ” 进行负面测试,但它将转换为格林尼治标准时间2020年1月2日星期四00:00:00而不引发任何问题。

sxc*_*731 11

OpenCSV 5

OpenCSV 5.x 以上本机支持 Java 8 java.time API。

引用文档:

包括对 Java 8 Time API 的完全支持。TemporalAccessor包括与实现的所有 JDK 类型之间的转换。

因此,以下内容就足够了:

@CsvDate(value = "yyyy-MM-dd")
@CsvBindByPosition(position = 8)
private LocalDate startDate;
Run Code Online (Sandbox Code Playgroud)


roo*_*kie 7

您可以为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样注释您的班级:

@CsvCustomBindByPosition(position = 8, converter = LocalDateConverter.class)
private LocalDate startDate;
Run Code Online (Sandbox Code Playgroud)

  • 好答案。对于 YYYY-MM-DD 的特定格式,无需指定格式。默认情况下解析该标准 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 格式:`LocalDate.parse("2019-01-23")` (2认同)