Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 SimpleDateFormat으로 날짜 문자열을 파싱하고 원하는 형식으로 변환하는 방법

자바에서 날짜를 원하는 형식으로 다루려면 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 패키지의 LocalDateTimeDateTimeFormatter를 사용하면 불변(immutable) 객체 기반으로 더 안전하고 직관적으로 날짜를 처리할 수 있으므로, 새 프로젝트에서는 java.time API 사용을 권장합니다.