본문 바로가기

Backend/Java

[JAVA] 날짜 출력 형식 지정을 위한 SimpleDateFormat 클래스

 


날짜 형식 지정을 위한 SimpleDateFormat 클래스


 

 

1. SimpleDateFormat


날짜 출력 형식을 제공하는 SimpleDateForamt 으로 Date로 추출한 날짜를 깔끔하게 출력해보자.

 

Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(); // 날짜 출력 형식 제공

System.out.println(today); // Mon Oct 21 18:15:11 KST 2024
System.out.println(sdf.format(today)); // 24. 10. 21. 오후 6:15
// System.out.println(new SimpleDateFormat().format(today));

 

SimpleDateFormat 객체.format(Date 객체) 을 통해 위와 같은 출력 형식을 얻을 수 있다.

 

 

만약, Calendar로 객체를 선언했다면

Calendar cal = Calendar.getInstance();
Date day = cal.getTime(); // Calendar -> Date

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

System.out.println(sdf.format(day));

 

(Calendar 객체).getTime(); 을 통해 Date 형식으로 받은 뒤 출력하면 된다.

 

 

 

2. 날짜 형식 지정


sdf = new SimpleDateFormat("yyyy-MM-dd"); // mm : minute 나옴
System.out.println(sdf.format(today));

 

2024-10-21 과 같은 사용자지정 형태로 출력하기 위해서는 SimpleDateFormat 객체 생성 과정에서 (괄호)안에 "큰 따옴표"를 통해 형식을 지정하면 된다. 이때 소문자 m은 minute(분)이 출력되므로 월을 출력하기 위해 대문자 M을 사용함으로 유의한다.

 

표시 형식에 사용되는 문자는 다음과 같다.

문자 형식
y 년도 yyyy : 2024
yy : 24
M MM : 01~12
M : 1~12
d dd : 01~31
d : 1~31
H HH : 01~23
H : 1~23
h hh : 01~12
h : 1~12
m  
s  
S 밀리초  
a 오전 / 오후  
D 올해의 D번째 날  
d 이달의 d번째 날  
w 올해의 w번째 주  
W 이달의 W번째 주  

 

 

이를 이용해 다양하게 형식을 출력해보자.

 

Date today = new Date();

SimpleDateFormat sdf2 = new SimpleDateFormat("yy년 MM월 dd일 E요일");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");

System.out.println("yy년 MM월 dd일 E요일\n" + sdf2.format(today));
System.out.println("yyyy-MM-dd HH:mm:ss,SSS\n" + sdf3.format(today));
System.out.println("yyyy-MM-dd HH:mm:ss a\n" + sdf4.format(today));

 

 

 

3. Date → String


Calendar cal = Calendar.getInstance();
Date day = cal.getTime();

 

앞서 위와 같은 방법을 통해 얻은 Date 객체 day를 String으로 변환해보자.

 

 

1. 비어있는 String 데이터를 이어붙이기

String strDate = day + ""; // 비어있는 String 데이터를 이어붙이기 -> 전체 String
System.out.println("strDate : " + strDate);

 

더하기 연산을 통해 String 데이터("")를 이어붙이면 전체적으로 String이 된다.

 

 

2. String 클래스의 valueOf() 메소드

String strDate = String.valueOf(day); // valueOf()
System.out.println("valueOf() : " + strDate);

 

(괄호)안 객체의 자료형을 String 객체로 변환해주는 String.valueOf() 형식을 이용해도 String으로 변환할 수 있다.

 

* 참고

String 형식에서 y, M, d 등을 뽑아내려면 subString 이용해야 한다.

 

 

 

4. String → Date


반대로 String을 Date 형식으로 변환하기 위해서는 어떻게 해야할까?

String 데이터를 Date 형식으로 형변환해주는 .parse(String데이터) 메소드를 사용하면 된다.

// "2024-10-21" -> 2024-10-21
strDate = "2024-10-21";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date newDate = sdf.parse(strDate);

System.out.println(newDate);

 

이때 strDate에 있는 String과 SimpleDateFormat 객체 sdf에 설정된 양식이 정확히 일치해야만 정상적으로 변환된다. 한글자라도 양식이 틀릴 경우 에러가 발생하며, throws ParseException 예외처리가 필요하다. 해당 구문은 간단히 말해 parse() 에서 에러가 발생할 경우 ParseException 이라는 예외를 띄우겠다는 의미이다. (예외처리는 다다음 포스트에서 다루겠다.)

 

public static void main(String[] args) throws ParseException {

 

일단 .parse() 메소드 사용을 위해 main 뒤에 throws ParseException 을 붙여주겠다.

 

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy년 MM월 dd일");
System.out.println(sdf2.format(newDate));

 

parse로 변환한 데이터가 Date 객체인지 확인하기 위해서 Date 객체를 필요로 하는 SimpleDateFormat 클래스의 format 메소드에 넣어봤다. 에러 없이 정상출력되는 것을 볼 수 있다.