[Java] 자바 날짜 포맷 변경법(SimpleDateFormat)

    DB를 가져올 때 날짜 포맷을 변경하여 처리할 수 있지만, 포맷을 변경하기 힘든 NoSQL DB 라든지 혹은 포맷을 변경하기 힘든 케이스의 경우 자바(Java)에서 지원하는 기능인 SimpleDateFormat을 사용하여 포맷을 변경할 수 있다.

     

    SimpleDateFormat 

    날짜를 바꾸기 위해서는 java에 내장되어 있는 SimpleDateFormat을 활용하여 포맷을 변경한다. 라이브러리의 이름처럼 심플하게 데이트 형태로 포맷을 변경한다.

     

    데이트포맷 옵션

    포맷문자

    날짜 및 시간 요소

    표현

    예시

    G

    Era designator

    Text

    AD

    y

    Year

    Year

    1996; 96

    Y

    Week year

    Year

    2009; 09

    M

    Month in year (context sensitive)

    Month

    July; Jul; 07

    L

    Month in year (standalone form)

    Month

    July; Jul; 07

    w

    Week in year

    Number

    27

    W

    Week in month

    Number

    2

    D

    Day in year

    Number

    189

    d

    Day in month

    Number

    10

    F

    Day of week in month

    Number

    2

    E

    Day name in week

    Text

    Tuesday; Tue

    u

    Day number of week (1 = Monday, ..., 7 = Sunday)

    Number

    1

    a

    Am/pm marker

    Text

    PM

    H

    Hour in day (0-23)

    Number

    0

    k

    Hour in day (1-24)

    Number

    24

    K

    Hour in am/pm (0-11)

    Number

    0

    h

    Hour in am/pm (1-12)

    Number

    12

    m

    Minute in hour

    Number

    30

    s

    Second in minute

    Number

    55

    S

    Millisecond

    Number

    978

    z

    Time zone

    General time zone

    Pacific Standard Time; PST; GMT-08:00

    Z

    Time zone

    RFC 822 time zone

    -800

    X

    Time zone

    ISO 8601 time zone

    -08; -0800; -08:00

    위 표는 SimpleDateFormat에서 제공하는 값으로 위 내용들을 조합하여 내가 원하는 날짜 포맷을 생성할 수 있다.

     

    14자리 숫자로 표현

    아무래도 날짜 데이터를 가장 많이 표현하는 것 중에 하나가 숫자형으로 표현을 하는 것이다. 예를 들어 현재 포스팅을 쓰고 있는 현재 시점을 숫자로 표현하고 싶을 경우 20201126222052와 같이 날짜값 8자리 시간값 6자리를 합친 14자리의 숫자로 표시하는 경우이다.

     

    이렇게 표현할 경우, long 형태로 값을 읽을 수 있고 내가 원하는 포맷으로 변경하기 쉬워지며 DB등에서 사용할 때 range를 지정하거나 정렬등을 할 때도 효과가 좋다. 

     

    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class main {
    
    	public static void main(String[] args) {
    		Date now = new Date();
    		System.out.println("now => " + now);
    		
    		SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
    		System.out.println("format => " + format.format(now));
    	}
    }

    내용 결과

    now => Thu Nov 26 22:28:30 KST 2020
    format => 20201126222830

     

    다양한 문자형 날짜 포맷

    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class main {
    
    	public static void main(String[] args) {
    		Date now = new Date();
    		
    		// 년월일만 표시
    		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
    		System.out.println(sdf1.format(now));
    		
    		// 2020년 11월 26일과 같이 표시
    		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy년 MM월 dd일");
    		System.out.println(sdf2.format(now));
    		
    		// 2020-11-26일과 같이 표시
    		SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");
    		System.out.println(sdf3.format(now));
    		
    		// AD 2020년 11월 26일 오후 10시 33분
    		SimpleDateFormat sdf4 = new SimpleDateFormat("G yyyy년 MM월 dd일 ahh시 mm분");
    		System.out.println(sdf4.format(now));
    	}
    }
    
    20201126
    2020년 11월 26일
    2020-11-26
    AD 2020년 11월 26일 오후10시 33분

    위 포맷 예제처럼 데이트포맷으로 무궁무진하게 날짜값을 조합하여 사용할 수 있다. 포맷 옵션등을 다양하게 해서 본인이 원하는 조합으로 날짜값을 만들면 충분하지만 보다 자세한 정보가 궁금할 경우 아래 참고자료를 봐서 해당 클래스에 대한 설명을 직접 보는 것이 좋을 것이다.

     

    참고자료

    https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
    반응형

    댓글

    Designed by JB FACTORY