但是我用的LocalDateTime
时间: 2023-07-12 11:50:34 浏览: 135
如果你需要转换的是`LocalDateTime`类型,可以稍微修改一下上面的代码,如下所示:
首先,修改DTO类的日期属性为`LocalDateTime`类型,并修改`@ExcelProperty`注解的`converter`属性为`LocalDateTimeConverter`类的类名:
```java
public class ExcelDataDTO {
@ExcelProperty(value = "日期", converter = LocalDateTimeConverter.class)
private LocalDateTime dateTime;
// 其他属性
}
```
然后,实现`LocalDateTimeConverter`类,代码如下:
```java
public class LocalDateTimeConverter implements Converter<LocalDateTime> {
private static final String[] DATE_FORMATS = {
"yyyy/MM/dd HH:mm:ss",
"yyyy/MM/dd HH:mm",
"yyyy/MM/dd",
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-dd HH:mm",
"yyyy-MM-dd",
"yyyyMMddHHmmss",
"yyyyMMddHHmm",
"yyyyMMdd"
};
@Override
public Class supportJavaTypeKey() {
return LocalDateTime.class;
}
@Override
public CellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
return new CellData(new SimpleDateFormat(DATE_FORMATS[0]).format(value));
}
@Override
public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws ParseException {
String strValue = cellData.getStringValue();
for (String dateFormat : DATE_FORMATS) {
try {
Date date = new SimpleDateFormat(dateFormat).parse(strValue);
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
} catch (ParseException ignored) {
}
}
throw new ParseException("无法识别的日期格式:" + strValue, 0);
}
}
```
上述代码中,`supportJavaTypeKey()`方法的返回值改为`LocalDateTime.class`,并且在`convertToJavaData()`方法中,将解析出来的`Date`对象转换为`LocalDateTime`对象。
最后,在读取Excel文件时,同样使用`EasyExcel.read()`方法时指定转换器即可:
```java
EasyExcel.read(inputStream, ExcelDataDTO.class, new DataListener<ExcelDataDTO>() {
@Override
public void onData(List<ExcelDataDTO> list) {
// 处理读取到的数据
}
}).registerConverter(new LocalDateTimeConverter()).sheet().doRead();
```
这样就可以实现匹配所有格式的`LocalDateTime`转换器了。
阅读全文