BE/Java

DateTimeFormatter.ofPattern

baek-dev 2025. 5. 27. 23:13

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