SimpleDateFormat
SimpleDateFormat (로케일 민감 날짜 형식화·파싱)
로케일 민감한 방식으로 날짜를 형식화(format)하고 파싱(parse)하는 구체 클래스예요. 형식화(날짜 → 텍스트), 파싱(텍스트 → 날짜), 정규화(normalization)를 허용해요.
본문
SimpleDateFormat은 날짜·시간 형식화를 위해 원하는 사용자 정의 패턴을 정해서 시작할 수 있게 해줘요. 그러나 DateFormat의 getTimeInstance, getDateInstance, getDateTimeInstance로 날짜·시간 포매터를 만드는 것이 권장돼요. 이 클래스 메서드들은 각각 기본 형식 패턴으로 초기화된 날짜·시간 포매터를 반환할 수 있어요. 원하면 applyPattern 메서드들로 형식 패턴을 수정할 수 있어요.
날짜·시간 패턴
날짜·시간 형식은 날짜·시간 패턴 문자열로 지정돼요. 패턴 문자열 안에서 인용되지 않은 'A''Z'와 'a''z' 문자는 날짜·시간 문자열의 구성 요소를 나타내는 패턴 문자로 해석돼요. 텍스트는 작은따옴표(')로 인용해 해석을 피할 수 있고, "''"는 단일 작은따옴표를 나타내요. 다른 모든 문자는 해석되지 않고, 형식화 중에는 출력 문자열로 복사되거나 파싱 중에는 입력 문자열과 비교돼요.
정의된 패턴 문자는 다음과 같아요('A''Z'와 'a''z'의 다른 모든 문자는 예약됨).
| 문자 | 날짜·시간 구성 요소 | 표현 | 예 |
|---|---|---|---|
G |
Era 지정자 | Text | AD |
y |
연도 | Year | 1996; 96 |
Y |
주 기반 연도 | Year | 2009; 09 |
M |
연의 월(문맥 민감) | Month | July; Jul; 07 |
L |
연의 월(독립형) | Month | July; Jul; 07 |
w |
연의 주 | Number | 27 |
W |
월의 주 | Number | 2 |
D |
연의 일 | Number | 189 |
d |
월의 일 | Number | 10 |
F |
월의 요일 수 | Number | 2 |
E |
주의 요일 이름 | Text | Tuesday; Tue |
u |
주의 일 번호 (1=월요일 ... 7=일요일) | Number | 1 |
a |
Am/pm 표시 | Text | PM |
H |
하루의 시 (0-23) | Number | 0 |
k |
하루의 시 (1-24) | Number | 24 |
K |
am/pm의 시 (0-11) | Number | 0 |
h |
am/pm의 시 (1-12) | Number | 12 |
m |
분 | Number | 30 |
s |
초 | Number | 55 |
S |
밀리초 | Number | 978 |
z |
시간대 | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z |
시간대 | RFC 822 time zone | -0800 |
X |
시간대 | ISO 8601 time zone | -08; -0800; -08:00 |
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2026-09-22 14:30:00");
String formatted = sdf.format(new Date());
패턴이 유효하지 않으면 IllegalArgumentException이, 파싱이 실패하면 ParseException이 던져질 수 있어요. 이 클래스는 로케일 민감하므로 Date 값이 항상 유효한지, 그리고 Calendar가 단순화했는지(timezone) 고려해야 해요.