Aspose.cell excel转pdf日期格式不正确yyyy/MM/dd变成MM/dd/yyyy

最近使用Aspose.cell将excel转pdf过程中excel中时间格式列的显示和excel表里的值显示不一样。

excel里日期格式 yyyy/MM/dd

pdf里日期格式MM/dd/yyyy

主要原因:linux和windows里内置的时间格式不一致,当代码部署到linux服务器的时候转换格式就会发生不一致的问题。
解决方法:使用apache poi获取aspose遍历所有的CELL判断其类型,若是日期格式则手动格式化日期格式并将单元格设置成String类型。

接下来详细讲解怎么操作。

例:这边的的B列设置了时间格式且显示是yyyy/MM/dd

但转成pdf过程中却格式变样了变成MM/dd/yyyy

在这里插入图片描述

java 复制代码
/**
   对excel里所有单元格进行遍历,判断单元格类型是Numeric且是时间类型,
   类型==14)则进行日期格式化且将cell类型设置成String
   单元格为自定义类型的时候,cell.getCellStyle().getDataFormat()值:
  yyyy-MM-dd---->14
  yyyy年m月d日--->31
  yyyy年m月------>57
  m月d日  -------->58
  HH:mm--------->20
  h时mm分  ------>32
 */
public void formatterAllDateCellStyle(POIUtils poiUtils) {
        Sheet sheet = poiUtils.getSheet();
        // 遍历行Row
        // 获取sheet中的总行数
        int rowTotalCount = sheet.getLastRowNum();
        for (int i = 0; i <= rowTotalCount; i++) {
            // 获取第i列的row对象
            Row row = sheet.getRow(i);
            //解决空白行问题
            if (row == null) {
                continue;
            }
            //获取总列数
            int columnCount = row.getLastCellNum();
            for (int j = 0; j < columnCount; j++) {
                Cell cell = row.getCell(j);
                //如果未null则跳过
                if (row.getCell(j) == null) {
                    continue;
                } else {
                    if (cell.getCellType().equals(CellType.NUMERIC)) {
                        //日期格式
                        short format = cell.getCellStyle().getDataFormat();
                        if (DateUtil.isCellDateFormatted(cell)) {
                            if (format == 14) {
                                SimpleDateFormat sdf = null;
                                sdf = new SimpleDateFormat("yyyy/M/d");
                                double valueDouble = cell.getNumericCellValue();
                                Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(valueDouble);
                                String formatStr = sdf.format(date);
                                cell.setCellType(CellType.STRING);
                                cell.setCellValue(formatStr);
                            }

                        }
                    }
                }
            }
        }
    }
相关推荐
代码栈上的思考1 小时前
SpringBoot 拦截器
java·spring boot·spring
tiantangzhixia1 小时前
Master PDF Linux 平台的 5.9.35 版本安装与自用
linux·pdf·master pdf
送秋三十五1 小时前
一次大文件处理性能优化实录————Java 优化过程
java·开发语言·性能优化
雨中飘荡的记忆1 小时前
千万级数据秒级对账!银行日终批处理对账系统从理论到实战
java
jbtianci1 小时前
Spring Boot管理用户数据
java·spring boot·后端
Sylvia-girl1 小时前
线程池~~
java·开发语言
魔力军1 小时前
Rust学习Day3: 3个小demo实现
java·学习·rust
时艰.1 小时前
java性能调优 — 高并发缓存一致性
java·开发语言·缓存
落花流水 丶1 小时前
Java 多线程完全指南
java
jxy99981 小时前
mac mini 安装java JDK 17
java·开发语言·macos