Date와 Calendar만으로 날짜 데이터를 가져오려면 년,월,일,시,분,초를 다 가져와야 해서 굉장히 불편하다. 이럴 때 SimpleDateFormat을 주로 사용한다.
DateFormat은 추상클래스이며 SimpleDateFormat의 조상이다. DateFormat는 추상클래스이므로 인스턴스를 생성하기 위해서는 getDateInstance()와 같은 static메서드를 이용한다. getDateInstance()에 의해서 반환되는 것은 DateFormat을 상속받아 완전하게 구현한 SimpleDateFormat의 인스턴스 이다.
SimpleDateFormat을 사용하는 방법은 위의 표를 참고하여 원하는 형식의 패턴을 작성해서 SimpleDateFormat인스턴스를 생성한 다음, 출력하고자 하는 Date인스턴스를 가지고 format(Date d)를 호출하면 지정한 패턴에 맞는 문자열을 얻는다.
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);
아래 코드는 사용 예시이다.
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatExample {
public static void main(String[] args) {
Date today = new Date();
SimpleDateFormat sdf1, sdf2, sdf3, sdf4;
SimpleDateFormat sdf5, sdf6, sdf7, sdf8, sdf9;
sdf1 = new SimpleDateFormat("yyyy-MM-dd");
sdf2 = new SimpleDateFormat("''yy년 MMM dd일 E요일");
sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
sdf5 = new SimpleDateFormat("오늘은 올 해의 D번째 날입니다.");
sdf6 = new SimpleDateFormat("오늘은 이 달의 d번째 날입니다.");
sdf7 = new SimpleDateFormat("오늘은 올 해의 w번째 주입니다.");
sdf8 = new SimpleDateFormat("오늘은 이 달의 W번째 주입니다.");
sdf9 = new SimpleDateFormat("오늘은 이 달의 F번째 E요일입니다.");
System.out.println(sdf1.format(today));
System.out.println(sdf2.format(today));
System.out.println(sdf3.format(today));
System.out.println(sdf4.format(today));
System.out.println();
System.out.println(sdf5.format(today));
System.out.println(sdf6.format(today));
System.out.println(sdf7.format(today));
System.out.println(sdf8.format(today));
System.out.println(sdf9.format(today));
}
}
아래 코드는 날짜 데이터의 출력형식을 변환하는 방법을 보여주는 예제이다. Integer의 parseInt()가 문자열을 정수로 변환하는 것처럼 SimpleDate Format의 parse(String source)는 문자열을 Date인스턴스로 변환해주기 때문에 매우 유용하게 쓰일 수 있다.
만약 사용자로부터 날짜 데이터를 2023년12월17일 이런식으로 받았다면 이를 substring을 사용하여 분리할 필요 없이 parse("2023년 12월 17일")에 넣어버리면 자동으로 해 준다.
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatExample2 {
public static void main(String[] args) {
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
try {
Date d = df.parse("2019년 11월 23일");
System.out.println(df2.format(d));
} catch (Exception e) {}
}
}
parse(String source)는 DateFormat클래스에 정의되어 있다.
지정된 형식과 입력된 형식이 일치하지 않는 경우에는 예외가 발생하므로 적절한 예외처리가 필요하다.