首先:日期有很多中格式,如下:
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来接收的
(可以看到上图,单元格的接收格式为字符串)
所以,我就将日期都用字符串来接收,然后再根据不同的格式将字符串转为日期类型(Date)
解决方案:
封装了一个将字符串转日期格式的方法(String => Date)
//字符串转日期 public Date stringToDate(Cell cell){ Date date=null; if (Cell.CELL_TYPE_STRING==cell.getCellType()){ SimpleDateFormat sdf =null; String cellValue=cell.getStringCellValue(); //将"/"都替换成"-",然后再统一处理字符串 //注意替换后的字符串一定要用一个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(); } }else { date=cell.getDateCellValue(); } return date; }
ps:
Java中需要转义的字符:( [ { / ^ - $ ¦ } ] ) ? * + .
转义方法就是在字符前加上"\\" ,这样split、replaceAll就不会出现问题了,但是String.contains()方法不需要转义。
使用
stringToDate(cell.getStringCellValue())