프로그래밍 언어/JAVA

Calendar 클래스

· 코딩마이데이

Calendar 클래스

Calendar 클래스는 java.util 패키지에 있는 추상 클래스로서 2가지 목적으로 사용됩니다. 첫째, 년, 월, 일, 요일, 시, 분, 초, 밀리초까지 기억하고자 하는 시간과 날짜 정보를 저장하기 위한 목적입니다. 둘째, 달력과 관련되어 다양한 정보를 얻기 위함입니다.

필드 의미 필드 의미
YEAR 연도 DAY_OF_YEAR 현재 연도에서 날짜(1부터 시작)
MONTH 달(0~11) DAY_OF_WEEK 한 주의 요일
HOUR 시간(0~11) WEEK_OF_YEAR 현재 연도에서 주 수(1부터 시작)
HOUR_OF_DAY 24시간을 기준으로 한 시간 AM_PM 오전인지 오후인지 구분
SECOND MINUTE
DAY_OF_MONTH 한 달의 날짜 MILLISECOND 밀리초

 

Calendar 객체 생성 - 현재 날짜와 시간

Calendar 클래스는 추상 클래스이므로, new Calendar()를 사용하지 않고 getInstance() 메소드를 통해 다음과 같이 Calendar 객체를 생성합니다.

Calendar now = Calendar.getInstance();

 

getInstance()가 리턴한 now 객체는 현재 날짜와 시간 정보를 가집니다. now를 이용하여 현재의 년도와 달, 시간 정보를 알아낼 수 있습니다.

 

날짜와 시간 알아내기

Calendar 객체에서 날짜와 시간을 알아내기 위해서는 get() 메소드의 필드를 이용합니다.

int year = now.get(Calendar.YEAR); // 현재 년도
int month = now.get(Calendar.MONTH) + 1; // 현재 달

 

get(Calendar.MONTH)는 1월 달이면 0을 리턴하기 때문에 month에 1을 더합니다.

 

날짜와 시간 설정하기

set() 메소드는 Calendar 객체에 날짜와 시간을 설정하는 메소드입니다.

Calendar firstDate = Calendar.getInstace();
firstDate.clear(); // 현재 날짜와 시간 정보를 모두 지운다.
firstDate.set(2023, 11, 25); // 2024년 12월 25일, 12월은 11로 설정
fistDate.set(Calendar.HOUR_OF_DAY, 30); // 저녁 8시로 설정
firstDate.set(Calendar.MINUTE, 30); // 30분으로 설정

 

Calendar를 활용하여 현재 날짜와 시간 알아내기/날짜 시간 설정하기

import java.util.Calendar;

public class CalendarEx {
	public static void printCalendar(String msg, Calendar cal) {
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH) + 1; // get()은 0~30까지의 정수 리턴
		int day = cal.get(Calendar.DAY_OF_MONTH);
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
		int hour = cal.get(Calendar.HOUR);
		int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
		int ampm = cal.get(Calendar.AM_PM);
		int minute = cal.get(Calendar.MINUTE);
		int second = cal.get(Calendar.SECOND);
		int millisecond = cal.get(Calendar.MILLISECOND);
		System.out.print(msg + year + "/" + month + "/" + day + "/");
		
		switch(dayOfWeek) {
		case Calendar.SUNDAY : System.out.print("일요일"); break;
		case Calendar.MONDAY : System.out.print("월요일"); break;
		case Calendar.TUESDAY : System.out.print("화요일"); break;
		case Calendar.WEDNESDAY : System.out.print("수요일"); break;
		case Calendar.THURSDAY : System.out.print("목요일"); break;
		case Calendar.FRIDAY : System.out.print("금요일"); break;
		case Calendar.SATURDAY : System.out.print("토요일"); break;
		}
		System.out.print("(" + hourOfDay + "시)");
		if (ampm == Calendar.AM)
			System.out.print("오전");
		else
			System.out.print("오후");
		
		System.out.println(hour + "시 " + minute + "분 " + second + "초 " + millisecond + "밀리초");
	}
	
	public static void main(String[] args) {
		Calendar now = Calendar.getInstance();
		printCalendar("현재 ", now);
		
		Calendar firstDate = Calendar.getInstance();
		firstDate.clear();
		firstDate.set(2016, 11, 25); // 2016년 12월 25일. 12월을 표현하기 위해 month에 11로 설정
		firstDate.set(Calendar.HOUR_OF_DAY, 20); // 저녁 8시
		firstDate.set(Calendar.MINUTE, 30); // 30분
		printCalendar("처음 데이트한 날은 ", firstDate);
	}
}

 

실행 결과

현재 2025/3/21/금요일(11시)오전11시 31분 51초 162밀리초

처음 데이트한 날은 2016/12/25/일요일(20시)오후8시 30분 0초 0밀리초

 

달의 최대 날 수 알아보기

Calendar는 달력을 만들거나 달력과 관련된 정보를 얻는데 활용됩니다. Calendar 객체에 연도와 달을 지정하면 해당 연도와 달의 최대 날짜를 알 수 있습니다.

Calendar cal = Calendar.getInstance(); // Calendar 객체 생성
cal.set(Calendar.YEAR, 2024); // 2024년 지정
cal.set(Calendar.MONTH, 1); // 2월 지정(달은 0부터 시작하므로 1은 2월을 뜻함)
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); // 2월의 최대 날 수 리턴

 

날짜를 지정하여 요일 알아내기

Calendar 객체에 날짜를 지정하면 요일을 알 수 있습니다.

cal.set(Calendar.YEAR, 2024); // 2024년 지정
cal.set(Calendar.MONTH, 1); // 2월 지정(달은 0부터 시작하므로 2월을 뜻함)
cal.set(Calendar.DAY_OF_MONTH, 5); // 5일 지정
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 2024년 2월 5일의 요일 알아내기

 

Calendar를 활용하여 지정한 날짜의 요일 알아내기

import java.util.Calendar;
import java.util.Scanner;
import java.util.StringTokenizer;

public class FIndDayOfWeekEx {
	public static String findDayOfWeek(int year, int month, int dayOfMonth) {
		Calendar cal = Calendar.getInstance(); // Calendar 객체 생성
		
		if (month < 1 || month > 12) // month의 범위 오류 확인
			return "입력 오류! 달의 범위는 1~12입니다.";
		
		cal.set(Calendar.YEAR, year); // 캘린더 객체에 년도 지정
		cal.set(Calendar.MONTH, month - 1); // 캘린더 객체에 월 지정
		
		// dayOfMonth의 범위 오류 확인(year 년의 month 달의 최대 일 수)
		// cal 객체에 설정된 년도와 월의 날짜 알아내기(예: 2024년 2월 경우 29)
		int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		if (dayOfMonth > maxDay)
			return "입력 오류! " + year + "년 " + month + "월은 " + maxDay + "일까지입니다.";
		
		cal.set(Calendar.DAY_OF_MONTH, dayOfMonth); // 캘린더 객체에 일 지정
		
		// cal 객체에 설정된 년, 월, 일의 요일 알아내기
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 요일 알아내기
		String res = "";
		switch (dayOfWeek) {
		case Calendar.SUNDAY : System.out.print("일요일"); break;
		case Calendar.MONDAY : System.out.print("월요일"); break;
		case Calendar.TUESDAY : System.out.print("화요일"); break;
		case Calendar.WEDNESDAY : System.out.print("수요일"); break;
		case Calendar.THURSDAY : System.out.print("목요일"); break;
		case Calendar.FRIDAY : System.out.print("금요일"); break;
		case Calendar.SATURDAY : System.out.print("토요일"); break;
		}
		
		return res;
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(true) {
			System.out.print("년 월 일 입력 >>");
			String line = scanner.nextLine();
			if (line.equals("그만"))
				break;
			StringTokenizer st = new StringTokenizer(line, " ");
			int year = Integer.parseInt(st.nextToken().trim());
			int month = Integer.parseInt(st.nextToken().trim());
			int dayOfMonth = Integer.parseInt(st.nextToken().trim());
			String dayOfWeek = findDayOfWeek(year, month, dayOfMonth);
			System.out.println(dayOfWeek);
		}
		scanner.close();
	}
}

 

실행 결과

년 월 일 입력 >>2024 1 1

월요일

년 월 일 입력 >>2024 2 5

월요일

년 월 일 입력 >>2024 2 30

입력 오류! 2024 2월 29일까지입니다.

년 월 일 입력 >>2024 13 7

입력 오류! 달의 범위는 1~12까지입니다.

년 월 일 입력 >>2024 10 16

수요일

년 월 일 입력 >>2024 8 15

수요일

년 월 일 입력 >>그만

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

Vector<E>  (0) 2025.03.28
컬렉션과 제네릭  (0) 2025.03.24
Math 클래스  (0) 2025.03.18
StringTokenizer 클래스  (0) 2025.03.14
StringBuffer 클래스  (0) 2025.03.13