Java 관련/Java

[Java] Calendar 클래스를 이용한 달력(calendar)

씨네 2021. 10. 27. 07:51
728x90

 


https://docs.oracle.com/en/java/javase/11/docs/api/index.html

 

Overview (Java SE 11 & JDK 11 )

This document is divided into two sections: Java SE The Java Platform, Standard Edition (Java SE) APIs define the core Java platform for general-purpose computing. These APIs are in modules whose names start with java. JDK The Java Development Kit (JDK) AP

docs.oracle.com

api 보는 곳!

calendar 클래스는

jaca.base

java.util

Calendar

에 있습니다.


CalendarUseApi.java

package com.cal02;

import java.util.Calendar;

public class CalendarUseApi {

  public void prn(int year, int month) {

    Calendar cal = Calendar.getInstance();

    System.out.printf("\t\t%d년 %d월\n",year, month);
    System.out.printf("일\t월\t화\t수\t목\t금\t토\n");

    cal.set(year, month - 1, 1);

    int start = cal.get(Calendar.DAY_OF_WEEK);

    for (int i = 1; i < start; i++) {
      System.out.print("\t");
    }

    for (int i = 1; i <= cal.getActualMaximum(Calendar.DATE); i++) {
      System.out.printf("%d\t", i);
      if(start % 7 == 0) {
        System.out.println();
      }
      start++;
    }
  }
}

 

 

MTest.java

package com.cal02;

import java.util.Scanner;
import com.cal01.DayOfCalendar;

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

    Scanner sc = new Scanner(System.in);

    System.out.print("연도 입력 : ");
    int year = sc.nextInt();
    System.out.print("월 입력 : ");
    int month = sc.nextInt();

    CalendarUseApi cal = new CalendarUseApi();
    cal.prn(year,month);

  }
}

위의 코드도 메소드가 모여있는 클래스인 CalendarUseApi클래스와 실행을 담당하는 MTest클래스로 나누어서 만들어 봤습니다. 그럼 코드를 하나씩 볼까요??

 

Calendar cal = Calendar.getInstance()

 

Calendar() API를 사용하기 위해 Calendar의 인스턴스를 cal에 담습니다.

 

System.out.printf("\t\t%d년 %d월\n",year, month);
System.out.printf("일\t월\t화\t수\t목\t금\t토\n");

달력이 예쁘게 출력되기 위해 달력 윗부분을 출력합니다.

 

cal.set(year, month - 1, 1);

시작 날짜를 설정합니다 -> month - 1 : Calendar는 0부터 시작하기 때문

 

int start = cal.get(Calendar.DAY_OF_WEEK);

일요일 : 1 , 월요일 : 2, 화요일 : 3, 수요일 : 4, 목요일 : 5, 금요일 : 6, 토요일 : 7

각 요일을 표현하는 숫자를 위와 같이 만듭니다.

 

for (int i = 1; i < start; i++) { 
 	System.out.print("\t"); 
}

일요일이 1이기 때문에 1부터 시작하여 시작 요일 이전을 빈 공간으로 처리합니다.

 

for (int i = 1; i <= cal.getActualMaximum(Calendar.DATE); i++) {
  System.out.printf("%d\t", i);
  if(start % 7 == 0) {
    System.out.println();
  }
  start++;
}

getActualMaximum는 현재 월의 가질 수 있는 최댓값을 나타내줍니다. 위의 코드는 달력을 출력시켜줍니다.

 

Scanner sc = new Scanner(System.in);

System.out.print("연도 입력 : ");
int year = sc.nextInt();
System.out.print("월 입력 : ");
int month = sc.nextInt();

CalendarUseApi cal = new CalendarUseApi();
cal.prn(year,month);

자 이제 메인메소드를 보면 연도와 월을 입력받고 CalendarUseApi 클래스의 prn메소드를 호출하네요. 이것도 2020년 12월을 입력해서 출력해볼까요?

 

 

api를 사용하지 않았을 때와 완벽하게 똑같이 출력이 됩니다!

 

728x90