Java POI操作Excel的日期,统一日期格式

Java POI操作Excel的日期,统一日期格式

java poi读取的excel的日期是一个数字,这个数字代表了从1900-1-1到该日期的天数
所以在读取时要将该数字转化为相应的日期

使用Date date = DateUtil.getJavaDate(cell.getNumericCellValue());可以转化为java日期

问题:
excel中存在很多不同形式的日期,1996/1/1 1996-1-1 1996-01-01 1996年1月1日等,当然这些日期可能是excel日期类型,也肯能是字符型的日期
想要将它们的统一成 yyyy-m-d的格式

例程:

     XSSFCell cell = row.getCell(j);
     switch (cell.getCellType()){
         case NUMERIC:
             String dateStr = "";
             if(cell.getNumericCellValue()<3000)
             {
                 dateStr = String.valueOf((int)cell.getNumericCellValue());
             } else{
                 Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
                 int year = date.getYear()+1900;
                 int mon = date.getMonth()+1;
                 dateStr = year + "-" + mon;
             }
             //System.out.println(dateStr);
             cell.setCellType(CellType.STRING);
             cell.setCellValue(dateStr);
             break;
         case STRING:
             String str = cell.getRichStringCellValue().toString();
             //System.out.println(str);
             cell.setCellValue(getDateFromString(str));
             break;
     }

 /**
     * 将字符形式的日期 转换成规范形式的字符日期
     *
     * @param str 转换后的字符型日期
     * @return java.lang.String
     * @exception/throws
     * @author yangxu
     * @date 2019-07-17 11:03
     */
    private static String getDateFromString(String str) {
        int len = str.length();
        String year = "";
        String mon  = "";
        if(!str.startsWith("20")&&!str.startsWith("19")){
            throw new RuntimeException("格式有误,第一行不是规范的日期类型");
        }
        if(len<=5) // 2019年
        {
            year = str.substring(0,4);
            return year;
        } else if(len<=7)//2019-01    2019-1  2019/1  2019.1  2019年3月
        {
            year = str.substring(0,4);
            if(str.substring(5).startsWith("0"))
            {
                mon = str.substring(6);
            } else {
                mon = str.substring(5);
            }

        } else if(len >=8)
        { // 2019-01-01    2019-1-1  2019/1/1  2019.1.1  2019年3月1日
            year = str.substring(0,4);
            String mon_day = str.substring(5);
            if(mon_day.startsWith("0"))
            {
                mon = mon_day.substring(1,2);
            } else
                {
                if(mon_day.charAt(1)>='0' && mon_day.charAt(1)<='9')
                {
                    mon = mon_day.substring(0,2);
                } else{
                    mon = mon_day.substring(0,1);
                }
            }
        }
        return year+"-"+mon;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值