DateTimeFormatter
DateTimeFormatter (날짜·시간 출력·파싱 포매터)
날짜·시간 객체를 출력(printing)하고 파싱(parsing)하는 포매터예요. 이 클래스는 출력·파싱의 주요 애플리케이션 진입점을 제공하고, DateTimeFormatter의 일반적인 구현을 제공해요.
본문
DateTimeFormatter를 만드는 방법은 크게 세 가지예요.
ISO_LOCAL_DATE같은 미리 정의된 상수 사용uuuu-MMM-dd같은 패턴 문자 사용long이나medium같은 로컬라이즈된 스타일 사용
더 복잡한 포매터는 DateTimeFormatterBuilder가 제공해요.
주요 날짜·시간 클래스들은 형식화를 위한 format(DateTimeFormatter formatter)와 파싱을 위한 parse(CharSequence text, DateTimeFormatter formatter) 메서드를 제공해요. 예를 들어:
LocalDate date = LocalDate.now();
String text = date.format(formatter);
LocalDate parsedDate = LocalDate.parse(text, formatter);
포매터는 원하는 Locale, Chronology, ZoneId, DecimalStyle로 만들 수 있어요.
withLocale()— 로케일을 덮어쓴 새 포매터를 반환해요. 로케일은 형식화·파싱의 일부 측면에 영향을 줘요. 예를 들어ofLocalizedDate는 로케일별 날짜 형식을 쓰는 포매터를 제공해요.withChronology()— 달력 시스템을 덮어써요. 덮어쓰면 형식화 전에 날짜·시간 값이 그 달력으로 변환돼요. 파싱 중에는 값이 반환되기 전에 그 달력으로 변환돼요.withZone()— 시간대를 덮어써요. 형식화 전에 값을 요청된ZoneId의ZonedDateTime으로 변환해요.withDecimalStyle()—DecimalStyle을 덮어써요. 심볼이 형식화·파싱에 사용돼요.
일부 애플리케이션은 형식화에 구형 java.text.Format 클래스를 써야 할 수도 있는데, toFormat() 메서드가 java.text.Format의 구현을 반환해요.
미리 정의된 포매터
| 포매터 | 설명 | 예 |
|---|---|---|
ofLocalizedDate(dateStyle) |
로케일의 날짜 스타일 사용 | '2011-12-03' |
ofLocalizedTime(timeStyle) |
로케일의 시간 스타일 사용 | '10:15:30' |
ofLocalizedDateTime(dateTimeStyle) |
로케일의 날짜·시간 스타일 사용 | '3 Jun 2008 11:05:30' |
ofLocalizedDateTime(dateStyle, timeStyle) |
로케일의 날짜·시간 스타일 사용 | '3 Jun 2008 11:05' |
BASIC_ISO_DATE |
기본 ISO 날짜 | '20111203' |
ISO_LOCAL_DATE |
ISO 로컬 날짜 | '2011-12-03' |
ISO_OFFSET_DATE |
오프셋 있는 ISO 날짜 | '2011-12-03+01:00' |
ISO_DATE |
오프셋 있거나 없는 ISO 날짜 | '2011-12-03+01:00'; '2011-12-03' |
ISO_LOCAL_TIME |
오프셋 없는 시간 | '10:15:30' |
ISO_OFFSET_TIME |
오프셋 있는 시간 | '10:15:30+01:00' |
패턴 기반 형식화
ofPattern(String pattern)으로 패턴 문자열에서 포매터를 만들 수 있어요. 예를 들어 DateTimeFormatter.ofPattern("EEE, MMM d, ''yy") 같은 형태예요. 패턴 문자는 yyyy(년), MM(월), dd(일), HH(시), mm(분), ss(초) 등 DateTimeFormatterBuilder의 패턴 목록에 정의돼 있어요.