Java 날짜 - java.util.Calendar 클래스
Calendar 클래스
Calendar 클래스(java.util
패키지)는 Java에서 날짜, 시간과 관련된 작업을 수행하려는 경우에 사용한다.
날짜/시간
Calendar
클래스의 인스턴스를 생성하려면 (new
연산자가 아닌) getInstance
메서드를 사용한다.
Calendar cal = Calendar.getInstance();
getTime 메서드
getTime
메서드는 캘린더의 날짜/시간을 받아온다.
public final Date getTime()
getTime
메서드를 이용하는 것으로 캘린더로부터 현재의 시각을 Date 객체(java.util
패키지)로서 받아올 수 있다.
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalTime {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 결과 : Mon Sep 05 11:34:21 KST 2022
}
}
실행 결과:
Mon Sep 05 11:35:30 KST 2022
get 메서드
get
메서드는 날짜/시간 요소 받아온다.
public int get(int field)
field: 취득할 날짜/시간 필드
달력에서 특정 날짜/시간 요소를 가져오려면 get
메서드를 사용한다. get
메서드에는 받아오고 싶은 일자/시각 요소에 대응하여 다음과 같은 정수를 지정한다.
Calendar
클래스에서 사용할 수 있는 주요 상수(날짜/시간 요소)
상수 | 개요 |
---|---|
YEAR |
년 |
MONTH |
월(0~11) |
DATE |
일 |
DAY_OF_YEAR |
그 해의 며칠째 |
WEEK_OF_MONTH |
그 달의 몇 주째 |
WEEK_OF_YEAR |
그 해의 몇 주째 |
HOUR_OF_DAY |
시(24시간) |
HOUR |
시(12시간) |
AM_PM |
오전(0), 오후(1) |
MINUTE |
분 |
SECOND |
초 |
MILLISECOND |
밀리초 |
DAY_OF_WEEK |
요일 |
DAY_OF_WEEK
(요일)는 반환 값으로 상수로 SUNDAY
, MONDAY
, TUESDAY
, WEDNESDAY
, TURSDAY
, FRIDAY
, SATURDAY
를 반환한다.
ppackage com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalGet {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.YEAR)); // 결과: 2022
System.out.println(cal.get(Calendar.MONTH)); // 결과: 8
System.out.println(cal.get(Calendar.DATE)); // 결과: 5
}
}
실행 결과:
2022
8
5
set 메서드
set
메서드 날짜/시간 요소 설정한다.
public final void set(int year, int month, int date [,int hour, int minute])
public void set(int field, int value)
year: 년
month: 달
date: 일
hour: 때
minute:분
field: 설정할 날짜/시간 필드
value: 인수 field에 설정할 값
달력의 시간/날짜 요소를 설정하려면 set
메서드를 사용한다.
연월일시분을 모와서 지정하려면, 첫번째 구문을 사용하면 된다.
특정 날짜/시간 요소(예: 연도)를 지정하려면. 두번째 구문에서 날짜/시간 필드 및 값 집합으로 지정한다. 인수 field
에 지정할 수 있는 값에 대해서는 위에 get
메서드의 테이블을 참조하여라.
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalSet {
public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
cal1.set(2022, 8, 1, 15, 20, 10);
System.out.println(cal1.getTime()); // 결과: Thu Sep 01 15:20:10 KST 2022
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.YEAR, 2022);
System.out.println(cal2.getTime()); // 결과: Mon Sep 05 11:41:55 KST 2022
}
}
실행 결과:
Thu Sep 01 15:20:10 KST 2022
Mon Sep 05 11:41:55 KST 2022
add 메서드
add
메서드는 날짜/시간 요소에 대해 추가/감산을 한다.
public abstract void add(int field, int amount)
field: 연산할 날짜/시간 필드
amount: 증감분
현재 날짜/시간 요소를 기준으로 값을 더하거나 빼려면 add
메서드를 사용한다. add
메서드에서는 지정된 일자/시각 요소(get
메서드의 테이블을 참조)에 대해서 인수 amount
의 값만 가산한다. 인수 amount
가 음수이면 감산을 한다.
CalAdd.java
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalAdd {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 결과: Mon Sep 05 11:43:44 KST 2022
cal.add(Calendar.YEAR, 3);
System.out.println(cal.getTime()); // 결과: Fri Sep 05 11:43:44 KST 2025
cal.add(Calendar.YEAR, -5);
System.out.println(cal.getTime()); // 결과: Sat Sep 05 11:43:44 KST 2020
}
}
실행 결과:
Mon Sep 05 11:43:44 KST 2022
Fri Sep 05 11:43:44 KST 2025
Sat Sep 05 11:43:44 KST 2020
roll 메서드
roll
메서드는 날짜/시간 요소 가산/감산(롤링)을 한다.
public void roll(int field, int amount)
public abstract void roll(int field, boolean up)
field: 가산/감산하는 일자/시간 필드(get 메서드의 표를 참조)
amount: 증감분
up: 증가할까
roll
메서드도 add
메서드와 동일하게 날짜/시간 요소를 가산/감산한다. 그러나 add
메서드와 다른 점음 다음과 같다.
-
다른 필드에 영향을 미치지 않는다.
17:59에 1분을 더하면,add
메서드는 시간이 늘어나 18:00이 된다. 그러나,roll
메서드는 올라가지 않고, 17:00이 된다. -
두 번째 인수에 부울 값을 지정할 수 있다.
두 번째 인수에true
를 지정하면 지정된 날짜/시간 필드를 증가시키고false
를 지정하면 감소한다.
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalRoll {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 결과: Mon Sep 05 11:46:43 KST 2022
cal.roll(Calendar.MINUTE, true);
System.out.println(cal.getTime()); // 결과: Mon Sep 05 11:47:43 KST 2022
}
}
실행 결과:
Mon Sep 05 11:46:43 KST 2022
Mon Sep 05 11:47:43 KST 2022
clear 메서드
clear
메서드는 날짜/시간 요소 지운다.
public final void clear([int field])
field: 지울 시간/날짜 필드
clear
메서드를 사용하면, 지정된 일자/시각 요소(get
메서드의 테이블을 참조)의 값을 클리어 한다. 지워진 필드에는 필드에 따라 결정된 초기 값이 설정된다.
인수 필드가 생략되면 모든 필드가 지워진다. 그렇게 되면 “1970/01/01 00:00:00"이 된다.
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalClear {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 결과: Mon Sep 05 11:52:06 KST 2022
cal.clear(Calendar.SECOND);
System.out.println(cal.getTime()); // 결과: Mon Sep 05 11:52:00 KST 2022
cal.clear();
System.out.println(cal.getTime()); // 결과: Thu Jan 01 00:00:00 KST 1970
}
}
실행 결과:
Mon Sep 05 11:52:06 KST 2022
Mon Sep 05 11:52:00 KST 2022
Thu Jan 01 00:00:00 KST 1970
before/equals/after 메서드
before
/equals
/after
메서드 날짜 비교 한다.
public boolean after(Object when)
public boolean before(Object when)
public boolean equals(Object when)
when: 비교할 캘린더
캘린더의 크기를 비교하려면 before
/equals
/after
메서드를 사용한다. before
메서드는 비교하는 캘린더가 현재의 캘린더보다 전인 경우에, equals
메서드는 동일한 경우에, after
메서드는 나중인 경우에 각각 true
를 반환한다.
CalEquals.java
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalEquals {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal.set(Calendar.YEAR, 2020);
cal2.set(Calendar.YEAR, 2015);
System.out.println(cal.before(cal2)); // 결과: false
System.out.println(cal.equals(cal2)); // 결과: false
System.out.println(cal.after(cal2)); // 결과: true
}
}
실행 결과:
false
false
true
캘린더가 동일하다는 것은 날짜/시간 값이 동일할 뿐만 아니라, 타임 존이나 로케일 등의 캘린더 설정도 동일한 것을 의미한다. 다른 캘린더에 대해 equals
메서드는 false
를 반환한다.