개발하자

Calendar 클래스 본문

TECH STACKS/JAVA

Calendar 클래스

개발리미 2023. 12. 5. 14:00
728x90

1. Calendar 클래스

  • Calendar(캘린더) 클래스는 Date 클래스와 마찬가지로 날짜와 시간을 다룬다.
  • 경우에 따라 Date 클래스와 Calendar 클래스를 상호 변환하는 상황이 있다.
  • java.util 패키지에 포함 (java.util.Calender)
  • 추상 클래스이기에 Calender.getInstance() 매소드를 이용하거나 Calendar 클래스를 상속 받는 GregorianCalendar 클래스를 이용하여 객체를 생성할 수 있다. (new 하여 객체 생성 불가능)
// 싱글톤 객체 생성
Calender cal = Calendar.getInstance();

 

2. 주요 상수

상수 설명 사용법
static int YEAR 현재 년도 Calendar.YEAR
static int MONTH 현재 월(1월:0) Calendar.MONTH
static int DATE 현재 월의 날짜 Calendar.DATE
static int WEEK_OF_YEAR 현재 년도의 몇째 주 Calendar.WEEK_OF_YEAR
static int WEEK_OF_MONTH 현재 월읠 몇째 주 Calendar.WEEK_OF_MONTH
static int DAY_OF_YEAR 현재 년도의 날짜 Calendar.DAY_OF_YEAR
static int DAY_OF_MONTH 현재 월의 날짜 Calendar.DAY_OF_MONTH
static int DAY_OF_WEEK 현재 요일 (일요일:1, 토요일:7) Calendar.DAY_OF_WEEK
static int HOUR 현재 시간 (12시간제) Calendar.HOUR
static int HOUR_OF_DAY 현재 시간 (24시간제) Calendar.HOUR_OF_DAY
static int MINUTE 현재 분 Calendar.MINUTE
static int SECOND 현재 초 Calendar.SECOND

 

4. 주요 매소드

매소드 설명
static Calendar getInstance() 현재 날짜와 시간 정보를 가진 Calendar 객체 생성
boolean after(Object when) 현재 날짜 이후면 true, 아니면 false를 반환
boolean befor(Object when) 현재 날짜 이전이면 true, 아니면 false를 반환
boolean equals(Object obj) 같은 날이면 true, 아니면 false
in get(int field) 현재 객체의 주어진 값의 필드에 해당하는 상수 값 반환
Date getTime() 현재 객체를 Date 객체로 변환
long getTimeInMillis() 객체의 시간을 1/1000초 단위로 변경하여 반환
void set(int field, int value) 현재 객체의 특정 필드를 다른 값으로 설정
void set(int year, int month, int date) 현재 객체의 년,월,일 값을 다른 값으로 설정
void set(int year, int month, int date, int hour, int minute, int second) 현재 객체의 년,월,일,시,분,초 값을 다른 값으로 설정
void setTime(Date date) date 객체의 날짜와 시간 정보를 현재 객체로 생성
void setTimeInMillis(long millis) 현재 격체를 1/1000초 단위의 주어진 매개변수 시간으로 설정
int getActualMinimum(int field) 현재 객체의 특정 필드의 최소 값을 반환
int getActualMaximum(int field) 현재 객체의 특정 필드의 최대 값을 반환

 

3. 예시

1) 기본 예시

import java.util.Date;


Calendar cal = Calendar.getInstance();			// 객체 생성

int year = cal.get(Calendar.YEAR);					
int month = cal.get(Calendar.MONTH) + 1;		// 월은 0부터 시작 이므로 + 1
int day = cal.get(Calendar.DATE);
int weekOfYear = cal.get(Calendar.WEEK_OF_YEAR);
int weekOfMonth = cal.get(Calendar.WEEK_OF_MONTH);
int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);		// 1:일요일 ~ 7:토요일
int hour = cal.get(Calendar.HOUR);
int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);

▷ 현재 월은 0부터 시작(1월 = 0 ~ 12월 = 11), +1 해주자

▷ 현재 요일은 일요일부터 1 ~ 토요일까지 7 

 

결과▽

기본예시 결과값

2) Date 클래스와 상호 변환

import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date

SimpleDateFormat smdf = new SimpleDateFormat("yyyy-MM-dd");

// 오늘 날 +N일
Date nowDate = new Date();				// 현재 날짜,시간,요일 등 정보
Calendar calendar = Calendar.getInstance();		// 캘린더 현재의 달력 정보 GET
calendar.setTime(nowDate);				// Date 객체를 사용하여 Calendar 객체의 시간을 현재 날짜와 시간으로 설정
calendar.add(Calendar.DATE, 8);				// 현재 날짜 + 8
String newDate = smdf.format(calendar.getTime());	// 원하는 형식으로 포맷

 

오늘 날짜는 2023년 12월 05일 + 8 하면 2023년 12월 13일 

예약 달력을 만들때 오늘 날짜 기준 몇일 후부터 예약 가능하게 할때 사용하기 좋을 것 같다. 

 


 

3) 메소드 예시

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();

cal1.set(2023, Calendar.JANUARY, 01);		// Calendar.월 로 원하는 달로 설정 (set메소드)
boolean after = cal1.after(cal2);		// 오늘이 2023.01.01 이후 인지	(afer메소드)
boolean before = cal1.before(cal2);		// 오늘이 2023.01.01 이전 인지	(before 메소드)
boolean equ = cal1.equals(cal2);		// 오늘이 2023.01.01와 같은지	(equals 메소드)
int week = cal1.get(Calendar.DAY_OF_WEEK);	// 무슨요일인지	(get 메소드)
Date date = cal1.getTime();			// date 객체 (date 메소드)
long diff = (cal2.getTimeInMillis() - cal1.getTimeInMillis()) / 1000;	// 몇초 지났는지(timeInMillis 메소드)
long diff2 = diff/(24*60*60);			// 몇일 지났는지

 

결과▽

 

4) 날짜 활용 예제

import java.util.Calendar
import java.util.Date

 Date dateCheck = new Date();
Calendar registerCal = Calendar.getInstance();
registerCal.set(Calendar.YEAR, 2023);
registerCal.set(Calendar.MONTH, 11);
registerCal.set(Calendar.DATE, 1);
registerCal.set(Calendar.HOUR_OF_DAY, 8);
registerCal.set(Calendar.MINUTE, 59);
registerCal.set(Calendar.SECOND, 59);

Calendar endCal = Calendar.getInstance();
endCal.set(Calendar.YEAR, 2023);
endCal.set(Calendar.MONTH, 11);
endCal.set(Calendar.DATE, 30);
endCal.set(Calendar.HOUR_OF_DAY, 18);
endCal.set(Calendar.MINUTE, 0);
endCal.set(Calendar.SECOND, 0);

if(dateCheck.after(registerCal.getTime()) && dateCheck.before(endCal.getTime())){
	// 2023년11월1일 9시부터 2023년11월30일 6시까지 표시할 내용
}

원하는 기간동안 접수를 받는 등 구현해야 할 때 간단하게 쓰인다

 

 


공부하면서 유용했던 부분 메모겸 공유하고자 끄적입니다.

고쳐야하는 부분있다면 댓글 남겨주시면 수정하겠습니다.

행복한 하루 보내세요 (❁´◡`❁)

728x90
반응형