添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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;
                    Java POI操作Excel的日期,统一日期格式java poi读取的excel的日期是一个数字,这个数字代表了从1900-1-1到该日期的天数所以在读取时要将该数字转化为相应的日期使用Date date = DateUtil.getJavaDate(cell.getNumericCellValue());可以转化为java日期问题:excel中存在很多不同形式的日期,1996/1/1...
poi日期数据也归类为Cell.CELL_TYPE_NUMERIC数字类型,
并且在cell中是正确读取到了 2015-05-25,但是在使用cell.getNumericCellValue()方法获取时却发生了变化,返回了42149.0
     * 获取每个单元格的内容
    private static  Object getCel...
				
CELL_TYPE_NUMERIC 数值型 0CELL_TYPE_STRING 字符串型 1CELL_TYPE_FORMULA 公式型 2CELL_TYPE_BLANK 空值 3CELL_TYPE_BOOLEAN 布尔型 4CELL_TYPE_ERROR 错误 5 日期既是CELL_TYPE_FORMULA 也是CELL_TYPE_STRING 数字既是CELL_TYPE_NUMERI
Excel存储日期、时间均以数值类型进行存储,读取时先使用POI判断是否是数值类型,再进行进一步判断是否为日期,最后转化 1.纯数值格式:getNumericCellValue() 直接获取数据 2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式 1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell) 2).判断是日期或者时间 cell.getCellStyle().getDataFormat() == H
Apache poi 版本:3.12 今天在用poi解析excel文件时,碰到一个蛋疼的问题。 在我的excel文件中有一列是日期类型,例如有以下这么一行数据(日期中月份前面的0会自动去掉): 在读取注册日期这个数据时,返回了一串数字,变成了 42149, 断点调试到读取数据的代码,发现poi是正确识别的,但是在读取具体数据时发生了变化: 从上图可以看到,poi日期数据也归类为
Excel中的日期格式,其数值为距离1900年1月1日的天数,比如2016-9-2将其转化为数字格式时变成了42615,在用java处理的时候,读取的也将是42615。 在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理。正确的处理方法是先判断单元格的类型是否则NUMERIC类型,然后再判断单元格是否为日期格式,如果是的话,
前不久写过一篇随笔《EXCEL解析之终极方法WorkbookFactory》,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种日期格式,比如下面这些: 那么如何将这些格式正确识别并输出呢?下面来分享一下解决方法。 其实答案已经在之前已经写过。需要回到之前比较笨重的那个办法,就是在读取单元格时对单元格中数据的种类做判断,再将数据做...
SimpleDateFormat dateformat = new SimpleDateFormat( "yyyy/MM/dd"); Date dt = HSSFDateUtil.getJavaDate(aCell
excel的时间格式是:CellType.Numeric 要判断时间还需要方法:DateUtil.IsCellDateFormatted(cell)的帮助: 示例代码如下: ICell cell = row.GetCell(j); if (cell.CellType == CellType.NUMERIC && DateUtil.IsCellDateFormatted(...
```java import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; // 创建Excel文件对象 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表对象 HSSFSheet sheet = workbook.createSheet("Sheet1"); // 清空sheet内容 sheet.getRows().clear(); ```java import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; // 创建Excel文件对象 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表对象 HSSFSheet sheet = workbook.createSheet("Sheet1"); // 新增行 HSSFRow row = sheet.createRow(0); // 在第1行创建行对象 row.createCell(0).setCellValue("A"); // 在第1行第1列创建单元格并赋值 row.createCell(1).setCellValue("B"); // 在第1行第2列创建单元格并赋值 ```java import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; // 创建Excel文件对象 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表对象 HSSFSheet sheet = workbook.createSheet("Sheet1"); // 删除第1行 sheet.removeRow(sheet.getRow(0)); 希望以上代码能够帮助到您!
netty报错Force-closing a channel whose registration task was not accepted by an event loop处理办法
netty报错Force-closing a channel whose registration task was not accepted by an event loop处理办法 get到了 Java Runtime.getRuntime().exec调用python程序问题总结 李大帅哥哈哈: 卧槽,我整了一上午都没弄好, Java Runtime.getRuntime().exec调用python程序问题总结 a holder: 红豆泥四密码三,非常感谢,解决了了大问题。 SpringBoot下载Excel文件,解决文件损坏问题 weixin_45994861: 下载下来的文件还是受损的,而且比文件大小变成了原来文件的一半表情包 SpringBoot下载Excel文件,解决文件损坏问题 theonly_df: 终于!解决了,我真的流泪了