[bug] - 关于poi导入excel时间格式会减少8小时的问题.

这个bug发生在使用poi组件导入导出excel时,(这里是导入)

首先在excel中的格式设定是

yyyy-mm-dd hh:mm:ss

通过配套使用ExcelUtil中 getCellValue(Cell cell)获取单元格的类型

经过判定后,时间格式会进入:

该getCellValue(Cell cell)返回类型为Object

cellValue = null;
case NUMERIC:

if (HSSFDateUtil.isCellDateFormatted(cell)){
cellValue = cell.getDateCellValue();

}

这种获取时间的方式会少8个小时.

经过查看poi的DateUtil源码改为:

            switch (cell.getCellType())
            {
                case NUMERIC: // 数字
                    if (HSSFDateUtil.isCellDateFormatted(cell))
                    {
                        double numericValue = cell.getNumericCellValue();
                        TimeZone zone = TimeZone.getTimeZone("GMT");
                        Date javaDate = DateUtil.getJavaDate(numericValue, zone);
                        System.out.println("javaDate:"+javaDate);
                        cellValue = javaDate;
                    }
                    else

异常消失,时间正常.

所以采用了上面设置timezone.并通过DateUtil(poi的)getJavaDate传入该zone即可.

这里可以将bean实体类上的时间GMT+8:00给取消了,参考: https://www.cnblogs.com/ukzq/p/9937002.html

转载于:https://www.cnblogs.com/ukzq/p/10452931.html

JavaPOI是一个用于读取和写入Microsoft Office格式文件(如Excel、Word和PowerPoint)的开源Java库。使用JavaPOI可以实现Excel导入导出操作。下面是一个简单的示例代码,演示如何使用JavaPOI实现Excel导入导出功能: 1. 导入Excel文件: ```java import org.apache.poi.ss.usermodel.*; public class ExcelImporter { public static void main(String[] args) { try { Workbook workbook = WorkbookFactory.create(new File("path/to/excel/file.xlsx")); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { // 处理单元格数据 String cellValue = cell.getStringCellValue(); System.out.print(cellValue + "\t"); } System.out.println(); } workbook.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 2. 导出Excel文件: ```java import org.apache.poi.ss.usermodel.*; public class ExcelExporter { public static void main(String[] args) { try { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头 Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Name"); headerRow.createCell(1).setCellValue("Age"); headerRow.createCell(2).setCellValue("Email"); // 写入数据 Row dataRow = sheet.createRow(1); dataRow.createCell(0).setCellValue("John Doe"); dataRow.createCell(1).setCellValue(25); dataRow.createCell(2).setCellValue("johndoe@example.com"); FileOutputStream outputStream = new FileOutputStream("path/to/excel/file.xlsx"); workbook.write(outputStream); workbook.close(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码演示了使用JavaPOI导入导出Excel文件的基本操作。你可以根据自己的需求进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值