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())

 

posted @ 2021-12-09 14:51  堇墨傾城  阅读(1141)  评论(0编辑  收藏  举报