一、原因:
easyExcel不支持LocalDate LocalTime 时间类型的转换
二、解决办法:
创建转换工具类
LocalDate:
package com.butel.oems.modules.outpatient.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* @auther 徐富林
* @date 2022/5/15
*/
public class EasyExcelLocalDateConverter implements Converter<LocalDate> {
@Override
public Class<LocalDate> supportJavaTypeKey() {
return LocalDate.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public LocalDate convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
@Override
public CellData<LocalDate> convertToExcelData(LocalDate value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return new CellData<>(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
}
LocalTime :
package com.butel.oems.modules.outpatient.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
/**
* @auther 徐富林
* @Date 2022/5/15
*/
public class EasyExcelLocalTimeConverter implements Converter<LocalTime> {
@Override
public Class supportJavaTypeKey() {
return LocalTime.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public LocalTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return LocalTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("HH:mm:ss"));
}
@Override
public CellData<LocalTime> convertToExcelData(LocalTime value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return new CellData<>(value.format(DateTimeFormatter.ofPattern("HH:mm:ss")));
}
}
三、使用注解转化日期格式
/**
* 出诊日期
*/
@ExcelProperty(value = "出诊日期",index = 2,converter = EasyExcelLocalDateConverter.class)
@ApiModelProperty(value = "出诊日期")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate schedulingDate;
/**
* 出诊开始时间
*/
@ExcelProperty(value = "出诊开始时间",index = 3,converter = EasyExcelLocalTimeConverter.class)
@ApiModelProperty(value = "出诊开始时间")
@JsonFormat(pattern = "HH:mm:ss")
private LocalTime schedulingStartTime;