• 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())
  • 相关阅读:
    浏览器内核
    link和@import的区别
    跨域iframe如何通信
    数组、对象基本操作
    浏览器兼容性问题
    微信H5开发
    前端面试整理
    js多维数组转一维数组
    js实现继承
    javascript函数闭包(closure)
  • 原文地址:https://www.cnblogs.com/javacyq/p/15667317.html
Copyright © 2020-2023  润新知