Language/Java

[Java] 날짜값 쉽게 변경하기(GregorianCalendar)

The Neo 2020. 12. 10. 18:31

많은 사람들이 SimpleDateFormat에 대해서 이제는 많이들 알고 있을 것이다. 그러나, Calendar를 핸들링하는 것이 익숙치 않을 것이라 생각한다. 이런걸 만들어 볼 이유도 없고 보통 DB를 핸들링하지 자바에서 날짜를 핸들링하는 것이 많지 않기 때문이다.

 

자바에는 GregorianCalendar라는 클래스가 존재한다. 이 캘린더 클래스를 이용하면 날짜값을 매우 쉽게 핸들링하는 것이 가능하다.

 

그레고리안캘린더

 

getTime 함수

GregorianCalendar cal = new GregorianCalendar();
System.out.println(cal.getTime());

아무것도 건드리지 않고 위 그레고리안캘린더를 생성 후 getTime을 출력하면

 

결과

Thu Dec 10 18:12:05 KST 2020

이와 같이 문자형태로 날짜값이 출력되어 나온다. 그러나 우리가 이런 날짜값을 원할리가 없다. 이 값을 SimpleDateFormat에 넣어본다.

 

SimpleDateFormat에 반영

GregorianCalendar cal = new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

System.out.println(sdf.format(cal.getTime()));

결과

20201210

현재 필자가 포스팅하는 날짜인 20201210 값이 잘 출력된 것을 확인할 수 있다. 즉, Date 객체가 아니더라도 GregorianCalendar 클래스를 사용한 getTime 객체는 날짜값이 잘 적용된 것을 확인할 수 있는데 이유는 getTime()이라는 녀석이 Date 객체를 반환하기 때문이다.

 

getTime 메소드

/**
     * Returns a <code>Date</code> object representing this
     * <code>Calendar</code>'s time value (millisecond offset from the <a
     * href="#Epoch">Epoch</a>").
     *
     * @return a <code>Date</code> representing the time value.
     * @see #setTime(Date)
     * @see #getTimeInMillis()
     */
    public final Date getTime() {
        return new Date(getTimeInMillis());
    }

이제 이 그레고리안 캘린더를 이용하여 날짜값을 제어해보기로 한다. 

 

 

날짜제어(예시, 하루전)

cal.add(GregorianCalendar.DATE, -1);	// 하루전
System.out.println(sdf.format(cal.getTime()));

결과

20201209

 

날짜제어(예시, 한달전)

// 한달 전날
cal.add(GregorianCalendar.MONTH, -1);
System.out.println(sdf.format(cal.getTime()));

결과

20201109

 

날짜제어(예시, 일주일전)

// 일주일 전
cal.add(GregorianCalendar.WEEK_OF_MONTH, -1);
System.out.println(sdf.format(cal.getTime()));

결과

20201102
반응형