Apache POI设置Excel单元格自定义日期时间格式的问题求助
Apache POI设置Excel单元格自定义日期时间格式的问题求助
嘿,我看你遇到的问题我之前也踩过一模一样的坑!给你说两个关键调整点,应该就能搞定:
首先是格式字符串的低级错误:你写的
yyyy-mm-dd hh:mm:ss里,小写的mm代表的是分钟,而月份必须用大写的MM!这是POI设置日期格式最常见的坑之一。另外如果需要24小时制的时间,小时部分要改用大写的HH,小写hh是12小时制的,会导致中午12点显示成00点哦。所以正确的格式字符串应该是yyyy-MM-dd HH:mm:ss(如果要12小时制就保留hh)。其次,必须确保你把
LocalDateTime转换成Excel能识别的日期类型,而不是直接设置成字符串。如果单元格内容是纯字符串,就算你设置了日期格式也完全不会生效。你可以这样转换:
// 假设你已经初始化了workbook和creationHelper XSSFCellStyle dateTimeCellStyle = (XSSFCellStyle) workbook.createCellStyle(); // 修正后的格式字符串 short formatIndex = creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"); dateTimeCellStyle.setDataFormat(formatIndex); // 处理你的LocalDateTime LocalDateTime yourDateTime = LocalDateTime.of(2025, 3, 4, 12, 1, 58, 689000000); // 转成Excel支持的Date类型 Date excelDate = Date.from(yourDateTime.atZone(ZoneId.systemDefault()).toInstant()); // 给单元格赋值并应用样式 XSSFCell cell = yourRow.createCell(0); // 这里替换成你实际的行对象 cell.setCellValue(excelDate); cell.setCellStyle(dateTimeCellStyle);
另外补充个小细节:如果你的Excel模板里已经存在相同的自定义格式,getFormat()可能会返回已有的索引,但上面的写法在绝大多数场景下都能正常工作。要是你发现格式还是不生效,可以试试用createDataFormat().addFormat("yyyy-MM-dd HH:mm:ss")来手动添加格式,不过一般来说前面两个调整就够了。
你赶紧试试上面的修改,应该就能看到单元格显示成你想要的2025-03-04 12:01:58这种格式啦!




