EasyExcel导出,自定义Converter解决LocalDateTime、LocalDate时间转换

EasyExcel不支持LocalDate,和LocalDateTime接收数据

报错异常:Cannot find 'Converter' support class LocalDate

解决方式:建立Convert时间转换类

以下代码为实现

// BaseConvert 通用类

public abstract class BaseConverter <T> implements Converter<T> {
    private Class<T> clazz;

  // 子类传入class,接收LocalDate.class,LocalDateTime.class
    public BaseConverter(Class<T> clazz) {
        this.clazz = clazz;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public Class supportJavaTypeKey() {
        return clazz;
    }

    @Override
    public T convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
                                       GlobalConfiguration globalConfiguration) {

        // LocalDateTime 时间转换
        if (cellData.getData() instanceof LocalDate) {
            if (cellData.getType().equals(CellDataTypeEnum.NUMBER)) {
                LocalDate localDate = LocalDate.of(1900, 1, 1);
                localDate = localDate.plusDays(cellData.getNumberValue().longValue());
                return (T) localDate;
            } else if (cellData.getType().equals(CellDataTypeEnum.STRING)) {
                return (T) LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            } else {
                return null;
            }
        }

        // LocalDateTime 时间转换
        if (cellData.getData() instanceof LocalDateTime) {
            return (T) LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        }
        return null;

    }


    @Override
    public CellData convertToExcelData(T o, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        if (o instanceof LocalDate) {
       // todo 此处为伪代码o.String转LocalDate
            LocalDate localDate = DateUtil.strToLocalDate(o.toString(), "yyyy-MM-dd");
            return new CellData<>(localDate.toString());
        }

        if (o instanceof LocalDateTime) {
            // todo 同上,string转LocatDateTime
        }

        return new CellData<>(o.toString());
    }
}

  

// 子类

public class LocalDateConverter extends BaseConverter<LocalDate> {
    public LocalDateConverter() {
        super(LocalDate.class);
    }
}

  

// 使用

EasyExcel.write()
// 日期转换器
.registerConverter(new LocalDateConverter())
// 时间转换器
.registerConverter(new LocalDateTimeConverter())

  

posted @ 2021-07-06 11:21  悠哉日长大王  阅读(9714)  评论(1编辑  收藏  举报