问题场景
在使用easypoi导入Excel时,涉及到的常用日期会有yyyy-MM-dd HH:mm:ss、yyyy-MM-dd和HH:mm:ss,但是Excel上面的格式可不止这些,用户总会输入一些其他格式,如
如果在定义verify时用下面这种格式定义,那么总会只能获取到一部分值,如定义成String则获取不到Date格式的值,定义成Date则获取不到String格式的值。
public class verify implements IExcelModel, IExcelDataModel, Serializable {
@Excel(name = "xx日期")
private String dateExcel;
@Excel(name = "xx日期")
private Date dateExcel;
@Excel(name = "xx日期")
private Object dateExcel;
}
解决方法
easypoi版本
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.3.0</version> </dependency>
定义verify使用Excel注解importFormat = "yyyy-MM-dd",注意要使用String去接收
@Excel(name = "xx日期",importFormat = "yyyy-MM-dd")
private String dateExcel;
当接收到了Excel原始值后会easypoi会格式化成importFormat格式,但是有些格式需要自己处理,只是通过该注解能够获取到了值,至于格式不一致,我们可以自己去转换,如下:
public static String formatDateTime(String inputDate, DateTimeFormatter outputFormatter) {for (String format : SUPPORTED_FORMATS_DATE) {try {DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(format);LocalDateTime dateTime = LocalDateTime.parse(inputDate, inputFormatter);return dateTime.format(outputFormatter); // 转换为标准格式} catch (DateTimeParseException e) {// 如果当前格式解析失败,继续尝试下一个格式}}return null; // 如果所有格式都无法解析,返回 null }
private static final List<String> SUPPORTED_FORMATS_DATE = Arrays.asList(
"yyyy/M/d HH:mm:ss", // 2025/2/17 13:36:00
"yyyy-MM-dd HH:mm:ss", // 2025-02-17 13:36:00
"yyyy-M-dd HH:mm:ss", // 2025-2-17 13:36:00
"yyyy-MM-d HH:mm:ss", // 2025-2-17 13:6:00
"yyyy年MM月dd日 HH:mm:ss" // 2025年02月17日 13:36:00
);
通过该注解方式获取到值后在verifyHandler类处理成自己想要的格式。
总结
遇事不决问AI大模型,大模型乱答看源码解读各个注解的用途,通过AI大模型解释注解的意思,这样就能找到你想要的答案了。