java.text.SimpleDateFormat 클래스는 날짜 문자열을 Date 객체로 변환하거나(파싱), Date 객체를 원하는 형식의 문자열로 변환하는(포맷) 데 사용되는 클래스입니다.
날짜 문자열 파싱하기
SimpleDateFormat으로 날짜 문자열을 파싱하는 절차는 다음과 같습니다.
- 원하는 형식 패턴(format pattern)을 인자로 전달하여 SimpleDateFormat 객체를 생성합니다.
- parse() 메서드를 호출하여 날짜 문자열을 파싱합니다.
예제 코드
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
SimpleDateFormat formatter1 = new SimpleDateFormat("HH:mm:ss");
Date time1 = formatter1.parse("07:25:30");
System.out.println("Date value: "+time1);
SimpleDateFormat formatter3 = new SimpleDateFormat("hh 'o''clock' a");
Date time3 = formatter3.parse("09 o'clock AM");
System.out.println("Date value: "+time3);
}
}실행 결과
Date value: Thu Jan 01 07:25:30 IST 1970 Date value: Thu Jan 01 09:00:00 IST 1970
연도 포맷하기
SimpleDateFormat 클래스에서 연도를 표현할 때 사용되는 패턴 문자는 다음과 같습니다.
| 문자 | 구성 요소 | 예시 |
|---|---|---|
| y | 연도 (Year) | 2005, 96 |
| Y | 주 기준 연도 (Week year) | 2005, 96 |
y는 일반적인 달력상의 연도를 의미하고, Y는 주(week) 단위로 연도를 구분하는 '주 기준 연도'를 의미합니다. 두 문자의 차이는 연말·연초에 주가 걸치는 경우 결과가 달라질 수 있으므로 주의해야 합니다.
예제 코드
다음 예제는 SimpleDateFormat 클래스를 사용하여 다양한 방식으로 연도를 파싱하고 포맷하는 방법을 보여줍니다.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Example {
public static void main(String args[]) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/dd/MM");
Date date = formatter.parse("2007/25/06");
System.out.println("Date value: "+date);
formatter = new SimpleDateFormat("y:G");
date = formatter.parse("1920:BC");
System.out.println("Date value: "+date);
formatter = new SimpleDateFormat("D-M-Y");
date = formatter.parse("25-05-1989");
System.out.println("Date value: "+date);
}
}실행 결과
Date value: Mon Jun 25 00:00:00 IST 2007 Date value: Sun Jan 01 00:00:00 IST 1920 Date value: Sun Jan 01 00:00:00 IST 1989
참고 사항
패턴 문자 D는 '연 중 몇 번째 날(day of year)'을 의미하므로, 위 예제의 "D-M-Y" 패턴은 일반적인 '일-월-연도'와는 다르게 해석됩니다. 또한 SimpleDateFormat은 스레드에 안전하지 않기 때문에 멀티스레드 환경에서는 각 스레드별로 별도의 인스턴스를 생성하거나, Java 8 이상에서는 java.time 패키지의 DateTimeFormatter(스레드 안전) 사용을 권장합니다.