1. 문제

엑셀에서 날짜는 1900년 1월 1일을 '1'로 시작하여 1일마다 1씩 증가하는 시리얼 넘버(일련번호)로 저장된다. 따라서 DB에 저장되어 있는 시간 2006-02-15 04:34:33을 엑셀로 바로 가져와서 출력하면 38763.1906597222와 같이 원하지 않는 값이 출력된다. 즉 엑셀의 시리얼 넘버인 일련번호가 출력된다.

 

화면에 보이기 위한 형식을 위해 CellStyle + DataFormat을 지정한다.

 

2. 해결

// Workbook - 메모리에 가상의 엑셀을 만든다.
Workbook workbook = new SXSSFWorkbook();

// CreationHelper - 만드는 것을 도와주는 객체 : 워크북에 무언가를 만들겠다.
CreationHelper creationHelper = workbook.getCreationHelper();
DataFormat dataFormat = creationHelper.createDataFormat();
CellStyle dateStyle = workbook.createCellStyle();
dateStyle.setDataFormat(dataFormat.getFormat("yyyy-MM-dd HH:mm:ss"));

 

Cell bodyCell = bodyRow.createCell(0);
bodyCell.setCellValue(actor.getLastUpdate());
// 위에서 만든 dateStyle를 세팅한다.
bodyCell.setCellStyle(dateStyle);

 

포맷

yyyy-MM-dd 2026-02-10
yyyy.MM.dd 2026.02.10
yyyy-MM-dd HH:mm 2026-02-10 15:30
yyyy-MM-dd HH:mm:ss 2026-02-10 15:30:25

 

참고 사이트 :

https://www.baeldung.com/java-apache-poi-date-format

+ Recent posts