Java 개발을 하다 보면 문자열 형태의 날짜 값을 Date 객체로 변환해야 하는 경우가 자주 발생합니다. 이 글에서는 가장 많이 사용되는 네 가지 변환 방법을 예제 코드와 함께 정리했습니다.
1. SimpleDateFormat 클래스 사용하기
SimpleDateFormat 클래스의 생성자 중 하나는 원하는 날짜 형식을 나타내는 문자열을 인자로 받아 객체를 생성합니다. 문자열을 Date 객체로 파싱(변환)하는 절차는 다음과 같습니다.
- 원하는 형식 문자열을 전달하여 SimpleDateFormat 객체를 생성합니다.
- parse() 메서드를 사용해 날짜 문자열을 Date 객체로 변환합니다.
예제
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
String date_string = "2007-25-06";
// SimpleDateFormat 클래스 객체 생성
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");
// 주어진 문자열을 Date 객체로 파싱
Date date = formatter.parse(date_string);
System.out.println("Date value: " + date);
}
}출력 결과
Date value: Mon Jun 25 00:00:00 IST 2007
2. LocalDate 클래스 사용하기
Java 8부터 도입된 java.time 패키지의 LocalDate 클래스는 parse() 메서드를 제공합니다. 이 메서드는 날짜를 나타내는 문자열을 인자로 받아 LocalDate 객체를 반환하며, 기본적으로 ISO-8601 형식(yyyy-MM-dd)의 문자열을 처리할 수 있습니다.
예제
import java.time.LocalDate;
public class Test {
public static void main(String args[]) {
LocalDate date = LocalDate.parse("2007-12-03");
System.out.println(date);
}
}출력 결과
2007-12-03
3. DateUtils 클래스 사용하기
Apache Commons Lang 라이브러리의 DateUtils 클래스는 날짜 처리에 유용한 유틸리티를 제공합니다. 아래는 해당 패키지의 Maven 의존성 설정입니다.
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>DateUtils 클래스의 parseDate() 메서드는 날짜 문자열과 형식 문자열을 인자로 받아 Date 객체를 반환합니다. 여러 개의 형식을 배열로 전달하면 순서대로 시도하여 일치하는 형식으로 파싱한다는 장점도 있습니다.
예제
import java.util.Date;
import org.apache.commons.lang3.time.DateUtils;
public class Test {
public static void main(String args[]) throws Exception {
String dateInString = "2013-07-06";
Date date = DateUtils.parseDate(dateInString, "yyyy-MM-dd");
System.out.println(date);
}
}출력 결과
Sat Jul 06 00:00:00 IST 2013
4. Instant 클래스 사용하기
java.time.Instant 클래스의 parse() 메서드는 날짜·시간 문자열을 인자로 받아 해당 시점을 나타내는 Instant 객체를 반환합니다. ISO-8601 표준(예: yyyy-MM-ddTHH:mm:ssZ) 형식의 문자열을 처리하며, 타임스탬프나 UTC 기반 시간을 다룰 때 유용합니다.
예제
import java.time.Instant;
public class Test {
public static void main(String args[]) {
String dateInString = "2014-10-05T15:23:01Z";
Instant instant = Instant.parse(dateInString);
System.out.println(instant);
}
}출력 결과
2014-10-05T15:23:01Z
정리
레거시 코드나 구버전 Java 환경이라면 SimpleDateFormat을, Java 8 이상이라면 스레드 세이프하고 직관적인 LocalDate 또는 Instant 사용을 권장합니다. 유연한 형식 지정이 필요한 경우 Apache Commons Lang의 DateUtils도 좋은 선택지입니다.