JAVA
Test145.java / 자바의 주요(중요) 클래스 / Calendar 클래스를 활용한 만년달력 구현
universedevelope
2022. 10. 24. 22:37
/* =======================================
■■■ 자바의 주요(중요) 클래스 ■■■
======================================== */
// Calendar 클래스
/*
○ java.util.Calendar 클래스는
날짜와 시간을 객체 모델링화 한 클래스로
연, 월, 일, 요일, 시, 분, 초 까지의
시간과 날짜와 관련된 정보를 제공한다.
그리고, Calendar 클래스는 추상클래스이므로 직접 객체를 생성할 수 없으며
실제적인 메소드 구현은 Calendar 클래스의 서브 클래스인
GregorianCalendar 클래스에 정의되어 있다.
시스템으로부터 현재 시스템 시간 정보를 얻어올 때
getInstance() 라는 정적(static) 메소드를 이용하여 객체를 생성할 수 있다.
생성된 Calendar 클래스 객체는 시스템의 현재 날짜와 시간 정보를 가지며,
이 객체가 생성되면 갖고있는 시간 정보들은
get() 메소드를 이용하여 쉽게 가져올(사용할) 수 있다.
getInstance() 메소드는 내부적으로 GregorianCalendar 객체를 생성하여 돌려주기 때문에
GregorianCalendar 객체를 직접 생성하여 시간정보를 구할 수도 있다.
*/
// ○ 실습 문제
// 사용자로부터 연, 월을 입력받아
// 달력을 그려주는(출력하는) 프로그램을 구현한다.
// 단, 만년달력이 아니라 Calendar 클래스를 활용하여 작성할 수 있도록 한다.
// 실행 예)
// 연도 입력 : 0
// 연도 입력 : 2022
// 월 입력 : -2
// 월 입력 : 16
// 월 입력 : 7
/*
[ 2022년 7월 ]
일 월 화 수 목 금 토
====================================
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
====================================
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test145
{
public static void main(String[] args) throws IOException
{
Calendar Dal = new GregorianCalendar();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String [] weekdays = {"일", "월", "화", "수", "목", "금", "토"};
int [] arr;
int year;
int month;
// 사용자 --------- 입력
do
{
System.out.print("연도 입력(1이상) : ");
year = Integer.parseInt(br.readLine());
}
while (year<=0);
do
{
System.out.print("월 입력(1~12) : ");
month = Integer.parseInt(br.readLine());
}
while (month > 12 || month < 1);
// 사용자로부터 입력받은 연, 월을 이용하여 달력의 날짜 셋팅
Dal.set(year, month-1, 1);
// -- 월 구성시 입력값(month)을 그대로 사용하는 것이 아니라
// 입력값에서 1을 뺀 값으로 월을 설정해야 한다.
// -- 일 구성 시 입력받은 연, 월에 해당하는 1일로 설정해야 한다.
// 세팅된 달력의 날짜로부터 요일 가져오기
int weekday = Dal.get(Calendar.DAY_OF_WEEK); // 해당월의 1일의 요일
int lastday = Dal.getActualMaximum(Calendar.DATE);
// Dal.셋팅된 달의 최댓값을 반환한다. getActualMaximum()
//달력셋팅끝
// 결과 출력
System.out.println();
// 제목
System.out.printf("\t[ %d년 %d월]\n", year, month);
System.out.println("===========================");
// 요일
for (int i = 0;i < weekdays.length ;i++ )
System.out.printf("%3s", weekdays[i]);
System.out.println();
// 날짜(만년달력과 동일하게, 달력을 그리기 전 첫 요일만큼의 공백 발생)
// 일요일이면 공백 0으로 시작
// 월요일이면 공백 1로시작
// 화요일이면 공백 2로시작
// 수요일이면 공백 3로시작
// 목요일이면 공백 4로시작
// :
// :
for (int i = 1;i < weekday ;i++ )
{
System.out.printf("%4s", " "); // 첫 요일만큼 공백 발생
}
for (int i = 1; i <= lastday ; i++ )
{
System.out.printf("%4d", i);
weekday++; // 반복문수행하면서
// 날짜가 증가할때마다 요일도 증가하게끔 처리
// 요일은 일요일이 될때마다 개행하게끔 처리
if (weekday%7==1 && i != lastday)
{
System.out.println();
}
}
System.out.println();
// 마무리
System.out.println("===========================");
}
}
// 실행 결과
/*
[ 2022년 5월]
===========================
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
===========================
계속하려면 아무 키나 누르십시오 . . .
*/
728x90