Java Excel 导出日期指南
在 Java 中使用 Excel 导出日期时,需要注意 Excel 日期格式的特殊处理,以下是几种常见方法的详细说明:

使用 Apache POI 导出日期
Apache POI 是最常用的 Java 操作 Excel 库之一。
基本日期导出
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.util.Date;
public class ExcelDateExport {
public static void main(String[] args) throws Exception {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("日期示例");
// 创建行和单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
// 设置日期值
Date date = new Date();
cell.setCellValue(date);
// 设置单元格格式为日期格式
CellStyle dateStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
cell.setCellStyle(dateStyle);
// 写入文件
try (FileOutputStream fileOut = new FileOutputStream("日期示例.xlsx")) {
workbook.write(fileOut);
}
workbook.close();
}
}
自定义日期格式
// 设置不同的日期格式
CellStyle customDateStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
customDateStyle.setDataFormat(createHelper.createDataFormat().getFormat("MM/dd/yyyy"));
cell.setCellStyle(customDateStyle);
// 或者使用内置格式
CellStyle builtInDateStyle = workbook.createCellStyle();
builtInDateStyle.setDataFormat((short)BuiltinFormats.getBuiltinFormat("m/d/yy h:mm"));
使用 EasyExcel 导出日期
EasyExcel 是阿里巴巴开源的 Excel 处理库,更简单易用。
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class EasyExcelDateExport {
public static void main(String[] args) throws Exception {
// 准备数据
List<DateData> data = new ArrayList<>();
data.add(new DateData(new Date(), "当前时间"));
// 创建文件输出流
try (FileOutputStream fileOut = new FileOutputStream("easyexcel_date.xlsx")) {
// 设置单元格样式策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
// 设置日期格式
contentWriteCellStyle.setDataFormat((short)BuiltinFormats.getBuiltinFormat("yyyy-MM-dd HH:mm:ss"));
// 应用样式策略
HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
// 写入Excel
EasyExcel.write(fileOut, DateData.class)
.registerWriteHandler(styleStrategy)
.sheet("日期示例")
.doWrite(data);
}
}
// 数据模型
public static class DateData {
@ExcelProperty("日期")
private Date date;
@ExcelProperty("描述")
private String description;
public DateData(Date date, String description) {
this.date = date;
this.description = description;
}
// getters and setters
}
}
注意事项
-
Excel 日期存储机制:
- Excel 将日期存储为从 1900 年 1 月 1 日开始的天数(Windows)或 1904 年 1 月 1 日(Mac)
- Java 的 Date 对象需要正确转换为 Excel 日期数值
-
时区问题:
(图片来源网络,侵删)确保日期时区一致,避免因时区差异导致日期显示错误
-
格式问题:
- 如果日期显示为数字或乱码,通常是格式设置问题
- 检查单元格格式是否正确应用
-
日期范围:
- Excel 日期有范围限制(1900-1-1 到 9999-12-31)
- Java 的 Date 对象超出此范围可能导致问题
常见日期格式示例
// 各种日期格式示例
String[] dateFormats = {
"yyyy-MM-dd", // 2025-05-15
"MM/dd/yyyy", // 05/15/2025
"dd-MMM-yyyy", // 15-May-2025
"HH:mm:ss", // 14:30:25
"yyyy-MM-dd HH:mm:ss", // 2025-05-15 14:30:25
"MM/dd/yyyy HH:mm", // 05/15/2025 14:30
"yyyy年MM月dd日", // 2025年05月15日
"EEEE, MMMM dd, yyyy" // Monday, May 15, 2025
};
通过以上方法,你可以灵活地在 Java 中将日期正确导出到 Excel 文件中。

