使用 EasyExcel 转换器自定义时间类型转换
使用 EasyExcel 转换器自定义时间类型转换
每一句话都有后果
请原谅,近期由于生活变故导致文章很少再更新,虽然也没多少粉丝。
我们在使用 EasyExcel 进行导出时,可能需要对数据库查询出来的时间做个处理。
比如:我们从数据库查询出来的时间为 2021-11-27T10:00:00,而我们需要写入 Excel 中的数据则是 2021-11-27 10:00:00 或者是 2021-10-27 或者是 2021-10 这些格式的时候,我们就需要对查询出来的时间字段做个处理,这里不考虑在 sql 中格式化时间,因为太影响性能。
每一次沉默也是如此
EasyExcel 中自定义类型转换都需要实现 Converter 这个接口;在实现之前,我们先了解下 EasyExcel 的 converter 加载流程。
首先来看 EasyExcel 全局 Converter 加载器类:DefaultConverterLoader:
这里可以看到 EasyExcel 有两个私有的静态属性 defaultWriteConverter 与 allConverter,接着通过静态代码块对其进行了赋值。
详细可查看 com.alibaba.excel.converters 包下的 DefaultConverterLoader 类。
其实就是调用 putWriteConverter()、putAllConverter()方法放入转换器,初始化默认的加载器之后反射调用方法就好了。
长话短说,接下来我们进入实际操作阶段:
年月日时分秒类型的处理
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.LocalDateTime;
import java.time.format.DateTimeFormatter;/*** 自定义时间格式转换器** 格式:yyyy-MM-dd HH:mm:ss 可任意修改** @author Greenarrow**/
public class LocalDateTimeConverter implements Converter<LocalDateTime> {@Overridepublic Class supportJavaTypeKey() {return LocalDateTime.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}@Overridepublic LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));}@Overridepublic CellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return new CellData(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));}
}
年月日类型的处理
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;/*** 自定义时间格式转换器** 格式:yyyy-MM-dd** @author Greenarrow*/
public class LocalDateConverter implements Converter<LocalDate> {@Overridepublic Class supportJavaTypeKey() {return LocalDate.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}@Overridepublic LocalDate convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));}@Overridepublic CellData convertToExcelData(LocalDate value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return new CellData(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));}
}
年月类型的处理
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;/*** 自定义月消费时间格式转换器** 格式:yyyy-MM** @author Greenarrow*/
public class LocalMonthConverter implements Converter<LocalDate> {@Overridepublic Class supportJavaTypeKey() {return LocalDate.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}@Overridepublic LocalDate convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));}@Overridepublic CellData convertToExcelData(LocalDate value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return new CellData(value.format(DateTimeFormatter.ofPattern("yyyy-MM")));}
}
我们可以看到大体都一致,无非就是格式不一样的问题。
就算不受神的眷顾
接下来我们只需要在导出实体数据模型相应字段添加如下内容:
@ExcelProperty(value = "创建时间",converter = LocalDateTimeConverter.class)private LocalDateTime createTime;@ExcelProperty(value = "支付时间",converter = LocalDateTimeConverter.class)private LocalDateTime payTime;
OK,到了这里已经结束了。
还是可以选择热爱
该方法的优缺点如下:
优点:只需在每个需要转换的字段上添加自定义 converter 即可
缺点:如果有很多类,每个类中有很多需要单独转换的字段我们就要写很多个,比较繁琐
适用场景:任何场景
使用 EasyExcel 转换器自定义时间类型转换相关推荐
- EasyExcel导出自定义合并单元格文件
目标 需要使用阿里的EasyExcel库来导出excel,并要自定义合并单元格. 思路 这里自定义的CellWriteHandler需要将数据进行如下处理: 1.Excel每一行数据必须对应一个对象: ...
- Django中的日期处理注意事项和自定义时间格式转换
我们在用Django创建models时,常常会涉及时间日期字段的处理,Django里日期相关Field有DateTimeField.DateField和TimeField三种类型,看似简单,但其中有一 ...
- php时间日期函数转字符串,php自定义时间转换函数示例
本文实例讲述了php自定义时间转换函数.分享给大家供大家参考,具体如下: 我们可以把经常用到的函数封装起来,在抽象类中,然后继承来使用. /** * 时间转时间戳 * @param object $s ...
- python筛选时间段_django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
django admin管理工具有很多好用的功能,例如搜索框.筛选器等,编码简单,功能强大. 但是常规的时间筛选有一定局限性,只能显示一定时间节点到当前时间这一段时间段内的筛选结果,做不到自由定义时间 ...
- android自定义横向时间轴,Android自定义时间轴的实现过程
本文讲述Android自定义时间轴的实现过程,供大家参考,具体内容如下 时间轴效果,实际上非常简单,就是listView中一个又一个的条目而已-.大家可以只关注一个条目. 首先展示一个条目的布局效果 ...
- Apache DolphinScheduler 海豚调度器自定义时间参数
在Apache DolphinScheduler 海豚调度器(本文简称:小海豚) 官网中,我们看到其自定义时间的参数是这样介绍的 1.支持代码中自定义变量名,声明方式:${变量名}.可以是引用 &qu ...
- QVariant类及QVariant与自定义数据类型转换的方法
这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型"擦除"的作用.比如我们的 table单元格可以是string,也可以是int ...
- k3s证书过期的处理 以及 修改k3s证书有效期为10年(或自定义时间)
1.常规操作 由于k3s证书的默认过期时间是12个月,因此到期之前或不小心到期,需要轮换 其实官网有明确的说明以及处理办法--但是你会发现按照官方处理办法,基本上无法生效 这里给一个一定可行的办法 # ...
- 时间类型转换的问题“2021-01-20T10:09:11Z”
关于新手碰到时间类型转换的问题: 拿到的时间为字符串,格式为:"2021-01-20T10:09:11Z". 容易理解的解决方法: 先将该字符串转换为Date类型: SimpleD ...
最新文章
- 深度学习加速器堆栈Deep Learning Accelerator Stack
- 1-编程的基本条件和起步
- 【渝粤题库】广东开放大学 标准的研制与编制 形成性考核
- Win32ASM学习[3]:局部变量
- 机器学习算法--协同过滤算法
- java addlast_Java中的LinkedList addLast()方法: java.util.LinkedList.addLast() - Break易站
- Tipard Video Converter Ultimate如何旋转视频?
- 红橙Darren视频笔记 贝塞尔曲线实现消息拖拽粘性效果 画笔练习
- oracle11g设置开机自启动,oracle11g在linux系统下开机自启动设置
- 知识图谱java实现_知识图谱:neo4j(四)Java API
- Android【报错】This class should be public (android.support.v7.internal.widget.ActionBarView.HomeView)
- 用c#转换word或excel文档为html文件,C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例...
- 如何用matlab画圆的图像,matlab在图像上画圆
- 使用CSS动画实现 时钟转动效果
- C# 如何批量删除Excel单元格中的公式只保留数据
- python qq机器人 2019_QQ机器人开发
- ftp服务器上目录文件是否存在,在 Java 中如何检查 FTP 服务器上的文件或目录是否存在...
- opencv python教程简书_OpenCV-Python教程:57.图像修复
- 轮播图图片大小不统一
- percona toolkit系列(gh-ost)
热门文章
- 2021北京交通大学计算机专硕初试经验分享
- 如何有效清除页面缓存
- C++ warning: comparison is always false due to limited range of data type [-Wtype-limits]
- 光环国际PMP—3分钟解读:什么是项目经理
- 【EL】【JSTL】【文件上传下载】【学习笔记】寒假javaweb学习之旅1.5
- win7 命令行工具_7个很棒的命令行工具
- Kubernetes作为云原生应用的基石数据加密算法
- NOIP2021 游记
- Discuz! X3 数据字典_discuz教程
- STM32L431功耗参考表