DateTimeFormatter.ofPattern() 은 Java 8 이상에서 날짜와 시간 객체(LocalDate, LocalDateTime 등)를 포맷 문자열로 변환하거나, 반대로 문자열을 파싱할 때 사용하는 포맷 정의 메서드임.
DateTimeFormatter.ofPattern – 날짜 포맷 지정 메서드
DateTimeFormatter.ofPattern(String pattern) 은 Java 8 이상에서
날짜와 시간의 출력 형식을 지정하거나, 문자열을 날짜로 변환할 때 사용할 포맷 형식을 정의하는 메서드임.
SimpleDateFormat 의 최신 대체제로, 스레드 세이프하며 불변(immutable)한 객체임.
1. 기본 사용법
날짜를 문자열로 포맷하기 (format)
LocalDate date = LocalDate.of(2025, 5, 21);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formatted = date.format(formatter); // "2025-05-21"
문자열을 날짜로 파싱하기 (parse)
String dateStr = "2025-05-21";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate parsed = LocalDate.parse(dateStr, formatter);
2. 자주 사용하는 패턴 기호
패턴 | 설명 | 예시 |
yyyy | 4자리 연도 | 2025 |
yy | 2자리 연도 | 25 |
MM | 2자리 월 (01~12) | 05 |
M | 1~2자리 월 | 5 |
dd | 2자리 일 (01~31) | 21 |
d | 1~2자리 일 | 9 |
HH | 24시간제 시 (00~23) | 14 |
hh | 12시간제 시 (01~12) | 02 |
mm | 분 (00~59) | 08 |
ss | 초 (00~59) | 45 |
a | 오전/오후 | AM / PM |
E | 요일 (짧은 형식) | Wed |
EEEE | 요일 (풀 이름) | Wednesday |
yyyy-MM-dd'T'HH:mm:ss | ISO-8601 | 2025-05-21T14:30:00 |
3. 포맷 예시
LocalDateTime now = LocalDateTime.of(2025, 5, 21, 15, 30, 10);
now.format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm")); // "2025.05.21 15:30"
now.format(DateTimeFormatter.ofPattern("MM/dd/yyyy a hh:mm")); // "05/21/2025 PM 03:30"
now.format(DateTimeFormatter.ofPattern("yyyy년 M월 d일 EEEE")); // "2025년 5월 21일 수요일"
4. 패턴 적용 시 주의사항
항목 | 설명 |
MM vs mm | MM: 월 / mm: 분 → 혼용 시 결과 이상함 |
HH vs hh | HH: 24시간제 / hh: 12시간제 + a 필요 |
yyyy-MM-dd | 대부분 시스템 간 통신에서 선호되는 형식 (ISO 기준) |
잘못된 패턴 사용 | 런타임 시 IllegalArgumentException 발생 |
5. 실무 활용 예시
활용 상황 | 설명 |
로그 출력 시간 포맷 | yyyy-MM-dd HH:mm:ss.SSS |
파일명에 날짜 포함 | yyyyMMdd_HHmmss |
화면 UI용 날짜 출력 | yyyy년 M월 d일 EEEE |
외부 API로 날짜 전송 | ISO 8601 → yyyy-MM-dd'T'HH:mm:ss |
6. DateTimeFormatter는 스레드 세이프함
- DateTimeFormatter 는 불변 객체이며, 스레드 간 공유 가능함
- 과거의 SimpleDateFormat 은 스레드 세이프하지 않음 → 동기화 또는 별도 인스턴스 필요
정리
DateTimeFormatter.ofPattern() 은 Java 8 이상에서 날짜와 시간 객체를
지정한 문자열 포맷으로 변환하거나, 문자열을 날짜로 변환할 때 사용하는 포맷 정의 메서드임.
다양한 날짜/시간 형식을 지원하며, 스레드 세이프하고 재사용 가능함.
실무에서는 포맷을 Constants 클래스로 관리하여 일관성과 재사용성을 높이는 방식도 많이 사용됨.
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
LocalDate.parse(입력문자,포맷); (1) | 2025.05.29 |
---|---|
date.format() (0) | 2025.05.28 |
temporalAdjusters (0) | 2025.05.26 |
chronofield (0) | 2025.05.25 |
chronounit (0) | 2025.05.24 |