zoukankan      html  css  js  c++  java
  • 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())
  • 相关阅读:
    POJ1239
    HDU 2829 四边形不等式优化
    返回数字二进制的最高位位数o(n)
    矩阵快速幂 模板
    HDU4718 The LCIS on the Tree(LCT)
    HDU4010 Query on The Trees(LCT)
    HDU3487 Play With Chains(Splay)
    CF444C DZY Loves Colors
    HDU4836 The Query on the Tree(树状数组&&LCA)
    HDU4831&&4832&&4834
  • 原文地址:https://www.cnblogs.com/javacyq/p/15667317.html
Copyright © 2011-2022 走看看