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

Java SimpleDateFormat 날짜 형식 코드 총정리 (패턴 문자표와 사용 예제)

java.text.SimpleDateFormat 클래스는 문자열을 날짜로, 날짜를 다시 문자열로 변환(포맷 및 파싱)할 때 사용하는 대표적인 Java 클래스입니다.

날짜 문자열 파싱하기

SimpleDateFormat 클래스의 생성자 중 하나는 원하는 날짜 형식을 나타내는 String 값을 인자로 받아 SimpleDateFormat 객체를 생성합니다. 문자열을 Date 객체로 파싱(변환)하려면 다음 단계를 따르면 됩니다.

  • 원하는 형식 문자열을 전달하여 SimpleDateFormat 객체를 생성합니다.
  • parse() 메서드를 사용하여 날짜 문자열을 파싱합니다.

아래 표는 날짜 포맷에 사용되는 패턴 문자(letter)와 각각의 의미, 그리고 예시를 정리한 것입니다.

문자구성 요소예시
G연대(Era) 표기AD, BC
y연도(Year)2005, 96
Y주 기준 연도(Week year)2005, 96
M월(Month in year)September, Sep, 09
L월(Month in year)September, Sep, 09
w연중 몇 번째 주(Week in year)23
W월중 몇 번째 주(Week in month)3
D연중 몇 번째 일(Day in year)129
d월중 몇 번째 일(Day in month)27
F월중 몇 번째 요일(Day of week in month)5
E요일 이름(Day in a week)Monday, Mon
u요일 번호(Day in a week)1
a오전/오후(AM/PM)Pm, AM
H시간(0-23)0, 22
k시간(1-24)1, 12, 24
K오전/오후 시간(0-11)0, 5, 11
h오전/오후 시간(1-12)1, 5, 12
m분(Minute in hour)25
s초(Second in minute)24
S밀리초(Millisecond)756
z타임존(Time zone)PST, GMT
Z타임존(RFC 822)-0500
X타임존(ISO 8601)-06, -0600, -06:00

사용 예제 1: 다양한 패턴으로 날짜 파싱

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Sample {
    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

사용 예제 2: 시간 및 요일 패턴 활용

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 formatter2 = new SimpleDateFormat("EEE:MMM-d:YYYY");
        Date time2 = formatter2.parse("Sun:Jan-8:2018");
        System.out.println("Date value: " + time2);

        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: Sun Dec 31 00:00:00 IST 2017
Date value: Thu Jan 01 09:00:00 IST 1970

참고 사항

SimpleDateFormat은 스레드에 안전하지 않으므로(thread-safe하지 않음), 여러 스레드가 동시에 접근하는 환경에서는 주의해야 합니다. Java 8 이상에서는 java.time.format.DateTimeFormatter 사용을 권장합니다. 또한 패턴 문자의 개수에 따라 출력 형태가 달라집니다. 예를 들어 'M'이 두 개(MM)면 숫자 월을, 네 개(MMMM)면 전체 월 이름을 표시하므로, 원하는 출력 형식에 맞게 패턴 문자 수를 조절하는 것이 중요합니다.