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來接收的

 

 

(可以看到上圖,單元格的接收格式為字符串)

所以,我就將日期都用字符串來接收,然后再根據不同的格式將字符串轉為日期類型(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())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM