在导入的模板文件中设置了日期格式 yyyy/mm/dd,java 接受实体类对应字段为Date

     /**
     * 使用日期
     */
      @ExcelProperty(value = "使用日期",converter = DateConverter.class)
      @DateTimeFormat("yyyy/MM/dd")
      @JsonFormat(pattern = "yyyy/MM/dd",timezone = "GMT+8",shape = JsonFormat.Shape.STRING)
      @JsonSerialize(using = DateSerializer.class)
      private Date usingTime;

easyExcel在解析时 该字段类型为Number. 值是从1900年1月1日到这一天的日期,所以添加解析器


public class DateConverter implements Converter<Date> {


    @Override
    public Class supportJavaTypeKey() {
        return Date.class;
    }

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

    @Override
    public Date convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) {
        if (cellData.getType().equals(CellDataTypeEnum.NUMBER)) {
            LocalDate localDate = LocalDate.of(1900, 1, 1);
            //excel 有些奇怪的bug, 导致日期数差2
            localDate = localDate.plusDays(cellData.getNumberValue().longValue() - 2);
            return Date.valueOf(localDate);
        } else if (cellData.getType().equals(CellDataTypeEnum.STRING)) {
            return Date.valueOf(LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy/MM/dd")));
        } else {
            return null;
        }
}

    @Override
    public CellData convertToExcelData(Date date, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) {
        return new CellData<>(date.toLocalDate().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")));
    }
}

GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io` 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐