Java/개념

[Java] Date와 Calendar 클래스

TheWing 2020. 11. 2. 13:12

Date와 Calendar 클래스

  • JDK 1.0 버전에서는 날짜를 처리하기 위해 Date 클래스를 사용했다.
  • JDK 1.1 버전부터는 Calendar 클래스를 사용하여 날짜 처리 작업을 하도록 변경되었다.
  • Date 클래스의 대부분 메소드들 deprecated 되었다.
  • 현재 Date클래스의 생성자는 두 개만 사용이 가능하고 나머지는 deprecated 되었다.
  • 먼저 Date 클래스의 생성자를 알아보자

 

Date 클래스의 생성자

생성자 설명
Date() 객체가 생성된 시간을 갖는 Date 객체를 생성
Date(long date) 매개 변수로 넘어온 long 타입을 갖는 Date 객체를 생성
  • Date(long date) 중 long date 값은 UTC 시간으로 현재 시간을 long 타입으로 리턴해주는 System.currentTimeMillis() 메소드 호출시 리턴되는 시간과 같다.
  • UTC 시간은 System 클래스에 속해있고 Univeral time 기준으로 1970년 1월 1일 00:00 부터 지금까지의 밀리초 단위의 차이를 출력하게 된다. 밀리초란 1/1,000 초이다. 1,000 밀리초를 다르게 표현하면 1,000ms라고 표시하고 1초와 같다.
  • Date 클래스의 메소드들은 deprecated 된 것이 대부분이며 사용 가능한 메소드들 중 쓸 만한 것은 getTime() 메소드와 setTime() 메소드이다
  • Date 클래스의 메소드를 알아보자

Date 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
long getTime() Date 객체의 시간을 long 타입으로 리턴
void setTime() Date 객체의 시간을 매개 변수로 받은 시간으로 변경
  • Date 클래스의 예제를 알아보자

 

import java.util.Date;

public class DateSample {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);

        long time = date.getTime();
        System.out.println(time);

        date.setTime(0);
        System.out.println(date);
    }
}
  • Date객체 생성 후 getTime() 메소드로 현재시간을 확인하고, setTime() 메소드로 long타입의 시간이 0일 때 Date 객체의 시간을 확인하는 예제이다
  • 실행 결과는 다음과 같다. 결과는 현재 시간에 따라 달라진다
Mon Nov 02 12:00:39 KST 2020
1604286039588
Thu Jan 01 09:00:00 KST 1970
  • 3번째 줄의 결과에 09:00:00으로 되어있는데 이것은 한국은 GMT 시간상+9시간이기 때문에 09시로 출력이 된다
  • 예를 들어) 오늘이 11월 2일이라고 했을 때 1주일 후는 11월 9일이 되겠지만 11월 28일일 경우에 1주일 후가 며칠인지 확인하려면 계산하는 것이 쉽지 않다. 그래서 , 제공되는 것이 Calendar 클래스이다.
  • Calendar 클래스는 다음과 같이 선언되어 있다
public abstract class Calendar 
	implements Serializable, Cloneable, Comparable<Calendar>
  • Calendar 클래스는 추상 클래스이며 생성자들이 protected로 선언되어 있다.
  • 즉, 이 클래스를 확장해서 구현하지 않으면 생성자로 객체를 만들 수 없다
  • 객체를 생성할 때 사용하는 메소드는 getInstance()를 사용하면 된다. 4가지의 메소드가 있으며 살펴보도록 하자
객체 생성 메소드 설명
getInstance() 기본 객체 생성 메소드, 모든 값은 기본값이며, 현재 시간으로 지정된 Calendar 객체를 생성
getInstance(Locale aLocale) 지정된 지역의 Calendar 객체를 생성
getInstance(TimeZone zone) 지정된 타임존의 Calendar 객체를 생성
getInstance(TimeZone zone, Locale aLocale) 지정된 타임존과 지역의 Calendar객체를 생성
  • Locale 클래스와 TimeZone 클래스는 모두 java.util 패키지에 선언되어있다.
  • Locale 클래스는 지역에 대한 정보를 담는다
  • TimeZone 클래스는 시간대를 나타내고 처리하기 위해서 사용된다.
  • TimeZone 클래스도 abstract 클래스이기 때문에 편하게 사용하려면 SimpleTimeZone 클래스를 사용하면 된다.
  • getInstance() 메소드를 사용해서 Calendar 객체를 생성할 수도 있지만 TimeZone과 같이 JDK 기본 API에는 GregorianCalendar 클래스를 제공한다
  • 일반적으로 GregorianCalendar 객체를 생성해서 사용하는 것을 권장한다.
  • 예제를 보기 전 Calendar 클래스의 API를 먼저 확인해 보는 것도 좋다고 생각된다
  • Calendar 클래스의 상수들을 살펴보면

Calendar 클래스의 상수들

  • 날짜 계산 관련
    • ERA, YEAR, MONTH, WEEK_OF_YEAR, WEEK_OF_MONTH, DATE, DAY_OF_MONTH, DAY_OF_YEAR, DAY_OF_WEEK,DAY_OF_WEEK_IN_MONTH
  • 시간 관련
    • AM_PM, HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND, ZONE_OFFSET, DST_OFFSET, AM, PM
  • 요일 관련
    • SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
  • 월 관련
    • JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
  • 기타
    • FIELD_COUNT, ALL_STYLES, SHORT, LONG
import java.util.Calendar;
import java.util.GregorianCalendar;

public class CalendarSample {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        Calendar greCal = new GregorianCalendar();

        int year = greCal.get(Calendar.YEAR);
        int month = greCal.get(Calendar.MONTH);
        int date = greCal.get(Calendar.DAY_OF_MONTH);

        System.out.println(year+"/"+month+"/"+date);
    }
}
// 결과
// 2020/10/2
  • 이 예제의 결과는 2020년 11월 02일 기준의 결과이다
  • 왜 11이 아니고 10이 나왔는지는 1월이 0부터 시작해서 11월이 10인 것이다.

 

 

다음 포스팅은 Date클래스와 Calendar 클래스가 Deprecated 된 이유를 포스팅하겠습니다

2020/11/02 - [Java/개념] - Java 에서 Date, Calendar클래스가 왜 Deprecated됐는지?