Calendar와 Date
Date는 날짜와 시간을 다룰 목적으로 JDK1.0부터 제공되어온 클래스이다. 하지만 그 기능은 턱없이 부족했기 때문에 Calendar라는 새로운 클래스를 그 다음 버젼인 JDK1.1부터 제공하기 시작했다.
Calendar는 Date보다 훨씬 보안되었지만 몇 가지 단점들이 여전히 존재했다. 그 후 JDK1.8부터 'java.time패키지'로 기존의 단점들을 개선한 새로운 클래스들이 추가되었다.
그럼에도 불구하고 Calendar와 Date는 자바의 탄생부터 지금까지도 사용되고 있으므로 간략하게 개념과 사용 방법들을 익히면 많은 도움이 될것이다.
Date와 Calendar간의 변환
Calendar가 새로 추가되면서 Date는 대부분의 메서드가 'deprecated(더 이상 사용을 권장하지 않음)' 되었으므고 잘 사용되지 않는다.
하지만 여전히 Date를 필요로 하는 메서드들이 있기 때문에 Calendar와 Date간의 변환이 필요할 일이 종종있다.
1. Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
...
Date d = new Date(cal.getTimeInMillis());
2. Date를 Calendar로 변환
Date d = new Date();
...
Calendar cal = Calendar.getInstance();
cal.setTime(d);
Calendar클래스
Calendar는 추상클래스이기 때문에 직접 객체를 생성할 수 없고, 메서드를 통해서 완전히 구현된 인스턴스를 얻어야 한다.
Calendar cal = new Calendar.getInstance();
이처럼 인스턴스를 직접 생성하지 않고 메서드를 통해서 인스턴스를 반환받게 하는 이유는 최소한의 변경으로 프로그램이 동작할 수 있도록 하기 위한 것이다.
국가마다 날짜를 세는 방법과 표기 방법이 다른데(역법) 이를 맞추기 위해 설정을 바꿔야 하는 경우 프로그램을 바꾸기 보다 getInstance()를 바꾸면 된다.
Calendar클래스의 메서드
getInstance()를 통해서 얻은 인스턴스는 기본적으로 현재 시스템의 날짜와 시간에 대한 정보를 담고 있다.
-int get(int field)
원하는 필드의 값을 반환한다.
이 때 get메서드의 매개변수로 사용되는 int값들은 Calendar에 정의된 static상수이다.
한가지 주의할 것은 get(Calendar.MONTH)로 얻어오는 값은 범위가 1~12가 아닌 0~11이라는 것이다. 따라서 얻어오는 값이 0이면 1월을 의미하며 11이면 12월을 의미한다.
-void set()
원하는 값으로 날짜와 시간을 변경한다.
이 때 매개변수로 필드값, 밸류값, 년도, 월, 시간, 분 ,초 등 날짜와 시간에 관련된 값들을 제공한다.
-add(int field, int amount) / roll(int field, int amount)
특정 날짜 또는 시간을 원하는 만큼 증가 또는 감소시킬 수 있다.
add메서드와 roll메서드의 차이점은 roll메서드는 변화하는 값이 다른 필드에 영향을 미치지 않는다. 예를들어 일수를 늘려도 다음달로 넘어가지 않는것이다. 단, 한가지 예외는 일 필드가 말일(end of month)일 때, roll메서드를 이용해서 월 필드(Calendar.MONTH)를 변경하면 일 필드(Calendar.DATE)에 영향을 미칠 수 있다.
'Java > 날짜와 시간 & 형식화' 카테고리의 다른 글
[Java] java.time패키지 - 코딩밥상 (0) | 2023.02.21 |
---|---|
[Java] 형식화 클래스(Format클래스) - 코딩밥상 (0) | 2023.02.21 |