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())
  • 相关阅读:
    模拟死锁
    B站学习斯坦福大学Swift 语言教程 iOS11 开发【第一集】踩到的几个坑(XCode 13.2.1版本)
    数学之美番外篇:平凡而又神奇的贝叶斯方法
    joj 1753: Street Numbers
    二叉树的三种遍历(递归+非递归)
    joj 1905: Freckles
    joj 2630: A Pair of Graphs(同构图的判定)
    vue3.x 中获取dom元素
    defineProperty 和 Proxy 的区别
    vue 按钮的防抖和节流
  • 原文地址:https://www.cnblogs.com/javacyq/p/15667317.html
Copyright © 2011-2022 走看看