[Java] java.util 패키지 - Calendar 클래스

chael_lo·2021년 5월 18일
1

Java

목록 보기
30/52

Calendar 클래스

날짜와 시간정보를 저장하기 위한 클래스다.

Calendar 클래스 메소드 종류

Calendar.getInstance()

시스템의 현재 날짜와 시간정보를 저장한 Calendar 인스턴스를 반환하는 메소드다.

Calendar now=Calendar.getInstance();

Calendar.toString()

Calendar 인스턴스에 저장된 날짜와 시간정보를 문자열로 변환하여 반환하는 메소드다.

System.out.println("now.toString() = "+now.toString());
System.out.println("now = "+now);//toString 생략가능

Calendar.get(int field)

Calendar 인스턴스에 저장된 정보 중 상수를 전달하여 원하는 값을 반환하는 메소드다.

String printDate=now.get(Calendar.YEAR)+"년"+(now.get(Calendar.MONTH)+1)+"월"+now.get(Calendar.DATE)+"일"+day[now.get(Calendar.DAY_OF_WEEK)-1]+"요일";
System.out.println("현재 = "+printDate);//출력: 현재 = 2021년 5월 18일 화요일

Calendar.set(int year, int month, int date)

Calendar 인스턴스에 저장된 날짜와 시간 관련 정보 중 년월일을 변경하는 메소드다.

int year = Integer.parseInt(scanner.nextLine());//년도 입력 받음
int month = Integer.parseInt(scanner.nextLine());//월 입력 받음

//시스템의 현재 날짜와 시간 관련 정보가 저장된 Calendar 인스턴스를 반환받아 저장
Calendar calendar = Calendar.getInstance();

calendar.set(year, month-1, 1);//월: 0~11이라 입력값에서 1 뺌

Calendar.getActualMaximum(int field)

Calendar 인스턴스에 저장된 날짜와 시간 관련 정보 중 전달된 상수의 최대값을 반환하는 메소드다.

calendar.getActualMaximum(Calendar.DATE);

예시) 키보드로 년, 월 입력받아 해당 년월에 대한 달력을 출력하는 프로그램을 작성하기

package xyz.itwill.util;

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

//키보드로 년과 월을 입력받아 해당 년월에 대한 달력을 출력하는 프로그램을 작성하세요. 
public class WantCalendarApp {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		
		System.out.print("년 입력 >> ");
		int year=Integer.parseInt(scanner.nextLine());
		
		System.out.print("월 입력 >> ");
		int month=Integer.parseInt(scanner.nextLine());
		
		scanner.close();
		
		//시스템의 현재 날짜와 시간 관련 정보가 저장된 Calendar 인스턴스를 반환받아 저장
		Calendar calendar=Calendar.getInstance();//2021-05-18
		
		//Calendar 인스턴스에 저장된 날짜 관련 정보를
        	//키보드로 입력한 년월에 대한 1일로 변경
		// => 일을 1일로 변경하는 이유는 1일에 대한 요일을 제공받기 위해 변경 
		//Calendar.set(int year, int month, int date) : Calendar 인스턴스에 저장된
		//날짜와 시간 관련 정보 중 년월일을 변경하는 메소드
		calendar.set(year, month-1, 1);//월 : 0~11
		
		//Calendar 인스턴스에 저장된 날짜와 시간 관련 정보 중 요일(일:1~토:7)을
        	//반환받아 저장
		int week=calendar.get(Calendar.DAY_OF_WEEK);

		//해당 년월에 대한 달력 출력
		System.out.println();
		System.out.println("============================");
		System.out.println("          "+year+"년 "+month+"월");
		System.out.println("============================");
		System.out.println("  일  월  화  수  목  금  토");
		System.out.println("============================");
		
		//1일에 대한 요일전까지 공백 출력
		for(int i=1;i<week;i++) {
			System.out.print("    ");
		}
		
		//1부터 달의 마지막 날까지 출력
		// => 토요일의 날짜 출력 후 새로운 줄로 바꾸어 출력
		//Calendar.getActualMaximum(int field) : Calendar 인스턴스에 저장된 날짜와 시간
		//관련 정보 중 전달된 상수의 최대값을 반환하는 메소드
		for(int i=1;i<=calendar.getActualMaximum(Calendar.DATE);i++) {
			if(i<=9) {
				System.out.print("   "+i);
			} else {
				System.out.print("  "+i);
			}
			
			week++;//요일 증가
			
			if(week%7==1) {//증가된 요일이 일요일인 경우
				System.out.println();
			}
		}
	}
}

출력 결과 예시: 2021년 5월

profile
천천히 꾸준히

0개의 댓글