자바에서 날짜를 원하는 형식으로 다루려면 java.text 패키지가 제공하는 SimpleDateFormat 클래스를 활용하면 됩니다. 이 클래스는 날짜를 지정한 패턴에 맞게 포맷하거나, 반대로 문자열을 날짜로 구문 분석(parse)하는 기능을 모두 지원합니다.
SimpleDateFormat 클래스의 핵심 개념
SimpleDateFormat의 생성자 중 하나는 원하는 날짜 형식을 나타내는 문자열(예: "dd-MM-yyyy")을 매개변수로 받아 SimpleDateFormat 객체를 생성합니다.
또한 이 클래스의 format() 메서드는 java.util.Date 객체를 인수로 받아, 현재 객체가 정의한 패턴에 맞는 날짜/시간 문자열을 반환합니다.
날짜 문자열을 다른 형식으로 변환하는 단계
날짜 문자열을 다른 날짜 형식으로 구문 분석하려면 다음 순서로 진행하면 됩니다.
입력받은 날짜 문자열을 준비합니다.
해당 문자열을 java.util.Date 객체로 변환(파싱)합니다.
원하는 새 형식을 문자열로 생성자에 전달하여 SimpleDateFormat 객체를 생성합니다.
앞서 얻은 Date 객체를 인수로 format() 메서드를 호출합니다.
예제 코드
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class FormattingDate {
public static Date StringToDate(String dob) throws ParseException {
// SimpleDateFormat 클래스 인스턴스 생성
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
// 주어진 문자열을 Date 객체로 파싱
Date date = formatter.parse(dob);
System.out.println("Date object value: "+date);
return date;
}
public static void main(String args[]) throws ParseException {
// 사용자로부터 이름과 생년월일 입력 받기
Scanner sc = new Scanner(System.in);
System.out.println("Enter your name: ");
String name = sc.next();
System.out.println("Enter your date of birth (dd-MM-yyyy): ");
String dob = sc.next();
// 문자열을 Date 객체로 변환
Date date = FormattingDate.StringToDate(dob);
System.out.println("Select format: ");
System.out.println("a: MM-dd-yyyy || b: dd-MM-yyyy || c: yyyy-MM-dd ");
char ch = sc.next().toCharArray()[0];
switch (ch) {
case 'a':
System.out.println("Date in the format: MM-dd-yyyy");
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(date));
break;
case 'b':
System.out.println("Date in the format: dd-MM-yyyy");
System.out.println(new SimpleDateFormat("dd-MM-yyyy").format(date));
break;
case 'c':
System.out.println("Date in the format: yyyy-MM-dd");
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
break;
default:
System.out.println("Format not found");
break;
}
}
}
실행 결과
Enter your name: Krishna Enter your date of birth (dd-MM-yyyy): 26-09-1989 Date object value: Tue Sep 26 00:00:00 IST 1989 Select format: a: MM-dd-yyyy || b: dd-MM-yyyy || c: yyyy-MM-dd a Date in the format: MM-dd-yyyy 09-26-1989
실행 결과를 보면 사용자가 이름(Krishna)과 생년월일(26-09-1989)을 입력했을 때, 프로그램은 먼저 이를 Date 객체로 파싱합니다. 이후 사용자가 형식 옵션 a(MM-dd-yyyy)를 선택하면 같은 날짜가 09-26-1989로 변환되어 출력됩니다. 이처럼 SimpleDateFormat의 패턴 문자열만 바꿔주면 하나의 날짜 값을 어떤 형식으로든 자유롭게 변환할 수 있습니다.
참고: Java 8 이상에서는 java.time API 권장
SimpleDateFormat은 스레드 세이프(thread-safe)하지 않기 때문에 멀티스레드 환경에서는 오류가 발생할 수 있습니다. Java 8부터 제공되는 java.time 패키지의 LocalDateTime과 DateTimeFormatter를 사용하면 불변(immutable) 객체 기반으로 더 안전하고 직관적으로 날짜를 처리할 수 있으므로, 새 프로젝트에서는 java.time API 사용을 권장합니다.