首先:日期有很多中格式,如下:
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())