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 메서드와 다른 점음 다음과 같다.

  1. 다른 필드에 영향을 미치지 않는다.
    17:59에 1분을 더하면, add 메서드는 시간이 늘어나 18:00이 된다. 그러나, roll 메서드는 올라가지 않고, 17:00이 된다.

  2. 두 번째 인수에 부울 값을 지정할 수 있다.
    두 번째 인수에 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를 반환한다.




최종 수정 : 2022-09-05