杰瑞科技汇

Java Excel导出日期格式如何正确显示?

Java Excel 导出日期指南

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

Java Excel导出日期格式如何正确显示?-图1
(图片来源网络,侵删)

使用 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
    }
}

注意事项

  1. Excel 日期存储机制

    • Excel 将日期存储为从 1900 年 1 月 1 日开始的天数(Windows)或 1904 年 1 月 1 日(Mac)
    • Java 的 Date 对象需要正确转换为 Excel 日期数值
  2. 时区问题

    Java Excel导出日期格式如何正确显示?-图2
    (图片来源网络,侵删)

    确保日期时区一致,避免因时区差异导致日期显示错误

  3. 格式问题

    • 如果日期显示为数字或乱码,通常是格式设置问题
    • 检查单元格格式是否正确应用
  4. 日期范围

    • 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 文件中。

Java Excel导出日期格式如何正确显示?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇