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 |
참고 사이트 :
'자바' 카테고리의 다른 글
| [Java] null을 문자열과 + 연산자를 사용하면 어떻게 될까? (0) | 2026.03.16 |
|---|---|
| [Java] 자바 Stream.forEach()와 람다식의 내부 동작 및 연결 과정 (0) | 2026.02.12 |
| [Java] <? super K> 제네릭 하한 경계 와일드 카드 (0) | 2026.01.09 |
| Java에서 Record가 뭘까? (0) | 2025.12.17 |
| [Java] 제네릭 메서드와 정적 메서드: 왜 ResponseDTO.<T>builder()는 되고 ResponseDTO<T>.builder()는 안 될까? (0) | 2025.01.28 |
