본문 바로가기
JAVA

[Java] Calendar 클래스 사용법

by devnyang 2024. 3. 4.
반응형

Calendar


- 추상클래스 ==> 직접 객체를 생성할 수 없고 메서드를 통해 인스턴스를 얻어야한다.

Calendar cal = new Calendar();   // 에러남.
Calendar cal = Calendar.getInstance(); //이렇게 쓰기!

 

 

 

사용법


사용전 import java.util.Calendar; 를 써줘야한다.

 


  • . get()

Calendar에 정의된 static 상수들을 매개변수로 사용한다. 

//기본적으로 현재 날짜와 시간으로 설정됨.
Calendar today = Calendar.getInstance(); //Calendar 클래스를 구현한 클래스의 인스턴스를 반환

today.get(Calendar.YEAR);    // 연도 구하기.  상수라서 대문자 사용.
today.get(Calendar.MONTH);   //월 구하기. *범위: 0~11
today.get(Calendar.WEEK_OF_YEAR);  //이 해의 몇째 주
today.get(Calendar.WEEK_OF_MONTH);  //이 달의 몇째 주
today.get(Calendar.DATE);  //이 달의 몇 일
today.get(Calendar.DAY_OF_MONTH);  //이 달의 몇 일
today.get(Calendar.DAY_OF_YEAR);  //이 해의 몇 일
today.get(Calendar.DAY_OF_WEEK);  //요일. 일요일:1 월요일:2 화요일:3 ...
today.get(Calendar.DAY_OF_WEEK_IN_MONTH);  //이 달의 몇 째 요일
today.get(Calendar.AM_PM);  //오전:0 오후:1
today.get(Calendar.HOUR);  //시간(0~11)
today.get(Calendar.HOUR_OF_DAY);  //시간(0~23)
today.get(Calendar.MINUTE);  //분(0~59)
today.get(Calendar.SECOND);  //초(0~59)
today.get(Calendar.MILLISECOND);  //1000분의 1초(0~999)

//천분의 1초를 시간으로 표현(3600000으로 나누기)
today.get(Calendar.ZONE_OFFSET/60*60*1000);  //TimeZone(-12~+12)

today.getActualMaximum(Calendar.DATE);  //이 달의 마지막 날
//*getMaximum 은 Calendar 자체가 최대로 가질 수 있는 날을 나타냄.

 

 


  • set메서드

- 날짜와 시간을 원하는 값으로 변경하고 싶을 때 사용한다.

 

날짜 설정하기.

import java.util.Calendar;

class Main {
public static void main(String[] args) {

final String[] DAY_OF_WEEK = {"", "일", "월", "화", "수", "목", "금", "토"};  //요일 배열 생성

Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();

date1.set(2024, 2, 4);  //2024년 3월 4일로 날짜 설정.
System.out.println("date1은 " + toString(date1) + DAY_OF_WEEK[date1.get(Calendar.DAY_OF_WEEK)] + "요일입니다.");
//date1은 2024년 3월 4일 월요일입니다.

//두 날짜간의 차이 얻기(천분의 일초단위로 변환필요)
long difference = (date2.getTImeInMillis() - date1.getTimeInMillis())/1000;


//String으로 변환하기 위한 메서드
public static String toString(Calendar date){
  return date.get(Calendar.YEAR) +"년 " + (date.get(Calendar.MONTH)+1) + "월 " + date.get(Calendar.DATE) +"일 ";
  }
}

 

-시간 설정하기.

Calendar time = Calendar.getInstance();

//time을 10시 20분 30초로 설정
time.set(Calendar.HOUR_OF_DAY, 10); 
time.set(Calendar.MINUTE, 20);
time.set(Calendar.SECOND, 30);

 

 

 


  • .add(int field, int amonut);

- 지정한 필드의 값을 원하는 만큼 증가 또는 감소시킨다.

 

Calendar date = Calendar.getInstance();
date.set(2019, 7, 31);  //2019년 8월 31일

date.add(Calendar.DATE, 1);  //2019년 9월 1일

date.add(Calendar.MONTH, -6);  //2019년 3월 1일

date.roll(Calendar.DATE, 31);  //2019년 3월 1일

date.add(Calendar.DATE, 31);  //2019년 4월 1일

 

* roll(int field, int amount) 도 지정한 필드의 값을 증가 또는 감소시키긴 하지만 다른 필드의 영향을 미치지 않는다.

add메서드는 date의 값을 증가시키다 다음달로 넘어가면 month의 값도 1일 증가하지만, roll메서드는 월 필드의 값이 변하지 않고 일 필드의 값만 바뀐다. 다만, 일 필드가 말일 일때 roll메서드를 통해 월 필드를 변경하면 일 필드에 영향을 준다.

 


 

*** 참조)  Calendar 와 Date 간의 변환  ***

1. Calendar를 Date로 변환

//Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
...
Date d = new Date(cla.getTimeInMillis());  //Date(ling date)

//Date를 Calendar로 변환.
Date d = new Date();
...
Calendar cal = Calendar.getInstance();
cal.setTime(d)

 

 

참고자료) "자바의 정석 기초편"

반응형