POI Excel导入日期时,不同日期格式出现的问题

 

首先:日期有很多中格式,如下:

yyyy-MM-dd 
yyyy-MM-dd HH:mm:ss   ##大写HH是24小时制的时间,小写hh是12小时制的时间
yyyy/MM/dd
yyyy/MM/dd HH:mm:ss

 

然后以前都是用 cell.getDateCellValue() 接收日期,但是会出现一些莫名其妙的报错,然后发现日期格式都是用的String来接收的

POI Excel导入日期时,不同日期格式出现的问题

 

 

(可以看到上图,单元格的接收格式为字符串)

所以,我就将日期都用字符串来接收,然后再根据不同的格式将字符串转为日期类型(Date)

 

解决方案:

封装了一个将字符串转日期格式的方法(String => Date)

//字符串转日期
public Date stringToDate(String cellValue){
Date date=null;
SimpleDateFormat sdf =null;
        //将"/"都替换成"-",然后再统一处理字符串
        //注意替换后的字符串一定要用一个String接收,不然一直用cellValue会报错,因为字符串是常量,对字符串进行操作都是新建一个新的String
String replaceAll = cellValue.replaceAll("\\/", "-");//   "/"需要转义

sdf=new SimpleDateFormat("yyyy-MM-dd");
if(replaceAll.contains(":")){
sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
try {
date=sdf.parse(replaceAll);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}

ps:

Java中需要转义的字符:( [ { / ^ - $ ¦ } ] ) ? * + .

转义方法就是在字符前加上"\\" ,这样split、replaceAll就不会出现问题了,但是String.contains()方法不需要转义。

 

使用


stringToDate(cell.getStringCellValue())

 

上一篇:后端xss漏洞处理


下一篇:C# MD5算法 16 32 大小写