본문 바로가기
JAVA BASE/DateTimeFormatting(포맷팅)

03. [자바] SimpleDateFormat

by staticClass 2020. 12. 30.

 

 

01. [자바] Calendar & Date

Calendar와 GregorianCalendar Calendar는 추상클래스이기 때문에 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다. Calendar cal = new Calendar(); // 추상클래스는 인스턴스를 생성할 수 없다...

staticclass.tistory.com


SimpleDateFormat클래스?

SimpleDateFormat 클래스는 Date와 Calendar의 날짜 데이터를 다양한 형태로 편하게 출력하기 위한 클래스이다, 만약 Date와 Calendar에 대해 궁금하다면 위 링크를 보시면 된다.

Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(today)); // 2020-12-30 
기호 의미 보기
G 연대(BC, AD) AD
y 년도 2006
M 월(1~12 또는 1월~12월) 10 또는 10월, OCT
w 년의 몇 번째 주(1~53) 50
W 월의 몇 번째 주(1~5) 4
D 년의 몇 번째 일(1~366) 100
d 월의 몇 번째 일(1~31) 15
F 월의 몇 번째 요일(1~5) 1
E 요일
a 오전/오후(AM,PM) PM
H 시간(0~23) 20
k 시간(1~24) 13
K 시간(0~11) 10
h 시간(1~12) 11
m 분(0~59) 35
s 초(0~59) 55
S 천분의 일초(0~999) 253
z Time zone(General time zone) GMT+9:00
Z Time zone(RFC 822 time zone) +0900
' escape문자(특수문자를 표현하는데 사용) 없음

SimpleDateFormat 사용해보기

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

public class DateFormatExample {
    public static void main(String[] args) {
      // Calendar클래스를 Date클래스로 바꾸려면 참조변수.getTime() 시 반환 타입이 Date이다.
//      Calendar cal = Calendar.getInstance(); 
//      Date day = cal.getTime();

        Date today = new Date();
        System.out.println(today);

        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(sdf1.format(today)); // 결과 : 2020-12-30

        SimpleDateFormat sdf2 = new SimpleDateFormat("''yy년 MM월 dd일 E요일''");
        System.out.println(sdf2.format(today)); // 결과 : '20년 12월 30일 수요일'

        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 HH:mm:ss.SSS");
        System.out.println(sdf3.format(today)); // 결과 : 2020년 12월 30일 수요일 03:28:23.359

        SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
        System.out.println(sdf4.format(today)); // 결과 : 2020-12-30 03:28:23 오전

        SimpleDateFormat sdf5 = new SimpleDateFormat("올해 D번째 날입니다.");
        System.out.println(sdf5.format(today)); // 결과 : 올해 365번째 날입니다.

        SimpleDateFormat sdf6 = new SimpleDateFormat("이 달의 d번째 날입니다.");
        System.out.println(sdf6.format(today)); // 결과 : 이 달의 30번째 날입니다.
    }
}

문자열을 날짜와 시간으로 파싱하기

문자열을 날짜와 시간으로 파싱하는 것도 가능하다.
대신 스트링의 패턴에 맞게 파싱 해주어야 한다.
예를 들면 2020-12-30의 문자열은 yyyy-MM-dd로 패턴을 맞추어서 파싱 해주어야
기대하는 값을 반환 받을 수 있다.

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

public class DateParsing {
    public static void main(String[] args) throws ParseException {
        Date today = new Date();
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        String str = sdf1.format(today); // 2020-12-30

        Date parsDay = sdf1.parse(str);
        System.out.println(parsDay); // 결과 : Wed Dec 30 00:00:00 KST 2020
    }
}

댓글