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

    많은 사람들이 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
    반응형

    댓글

    Designed by JB FACTORY