Test138 Calendar 클래스 / GregorianCalender()는 Calendar의 자식객체
※ java.util.Calendar 클래스는
날짜와 시간을 객체 모델링화 한 클래스로 연, 월, 일, 요일, 시, 분, 초 까지의 시간과 날짜가 관련된 정보를 제공한다.
그리고, Calendar 클래스는 추상클래스이므로 직접 객체를 생성할 수 없으며 실제적인 메소드 구현은 Calendar 클래스의 서브 클래스인
『GregorianCalendar』 클래스에 정의되어 있다.
시스템으로부터 현재 시스템 시간 정보를 얻어올 때 getInstance() 라는 정적(static) 메소드를 이용하여 객체를 생성할 수 있다.
생성된 Calendar 클래스 객체는 시스템의 현재 날짜와 시간 정보를 가지며, 이 객체가 생성되면 갖고 있는 시간 정보들은
get() 메소드를 이용하여 쉽게 가져올(사용할) 수 있다.
getInstance() 메소드는 내부적으로 GregorianCalendar 객체를 생성하여 돌려주기 때문에
GregorianCalendar 객체를 직접 생성하여 시간 정보를 구할 수도 있다.
※ 실습 문제
사용자로부터 연, 월 을 입력받아 달력을 그려주는(출력하는) 프로그램을 구현한다.
단, Calendar 클래스를 활용하여 작성할 수 있도록 한다.
Test138.java
import java.util.Scanner;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test138
{
public static void main(String[] args)
{
// Scanner 인스턴스 생성
Scanner sc = new Scanner(System.in);
// Calendar 인스턴스 생성
Calendar ob = new GregorianCalendar();
//-- GregorianCalendar()는 Calendar의 자식클래스임을 짐작할 수 있으며,
// 업캐스팅한 것이다.
// 주요 변수 선언
int y, m; //-- 사용자로부터 입력받은 년, 월을 담을 변수
// 연, 월 입력받기
do
{
System.out.print("연도 입력 : ");
y = sc.nextInt();
}
while (y<0); //-- 음수형 정수를 입력할 경우 양수형 정수를 받을 때 까지 반복한다.
do
{
System.out.print("월 입력 : ");
m = sc.nextInt();
}
while (m<0 || m>12); //-- 1~12월 사이로만 입력받도록 반복한다.
// 날짜 셋팅하기
ob.set(y, m-1, 1);
int dayOfWeek = ob.get(Calendar.DAY_OF_WEEK); //-- 요일 시작점을 받아와 변수 dayOfWeek에 담는다.
int monthDays = ob.getActualMaximum(Calendar.DATE); //-- 해당 월의 마지막 일을 받아와 변수 monthDays에 담는다.
// 결과 출력
System.out.printf(" [ %d년 %d월 ]\n", y, m); //-- 입력된 연, 월
System.out.println(" 일 월 화 수 목 금 토");
System.out.println("=====================");
//-- 해당 날짜의 첫 시작점(요일)이 dayOfWeek 이므로, 『i=1』로 시작해주고 시작점 전까지 공백처리시켜준다.
for (int i=1; i<dayOfWeek; i++)
System.out.print(" "); // 아래 숫자 영역이 %3d 이므로 공백또한 3칸으로 처리해준다.
/*----------------------------------------------------------------[내가 한거]
//-- 해당 월의 1일 부터 마지막 날짜까지 숫자를 기입한다.
for (int j=1; j<=monthDays; j++)
{
System.out.printf("%3d", j);
//-- 7로 나누어 떨어지면 개행을 하되 마지막 일수가 있는 날은 바로 개행을 시켜버린다.
if (((j+dayOfWeek-1)%7==0) || (j == monthDays))
System.out.println();
}
----------------------------------------------------------------*/
int w = dayOfWeek;
// Calendar 클래스의 『getActualMaximum()』 메소드 check~!!
for (int i=1; i<ob.getActualMaximum(Calendar.DATE); i++)
{
System.out.printf("%3d", i);
w++;
if (w%7==0)
{
System.out.println(); // 개행
}
}
if (w%7!=1)
System.out.println();
System.out.println("=====================");
}
}
cmd
연도 입력 : 2018
월 입력 : 5
[ 2018년 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
=====================
계속하려면 아무 키나 누르십시오 . . .
'Study Note > Java' 카테고리의 다른 글
JAVA_ Test140_ Math 클래스 (0) | 2018.06.16 |
---|---|
JAVA_ Test139_ Calendar 클래스 / GregorianCalender() / 날짜더하기 프로그램 (0) | 2018.06.16 |
JAVA_ Test137_ Calendar 클래스 / .get(Calendar.YEAR) (0) | 2018.06.16 |
JAVA_ Test136_ 문자열 관련 클래스 / 캐릭터 셋(CharacterSet) / try{}catch(){} / UnsupportedEncodingException (0) | 2018.06.16 |
JAVA_ Test135_ StringTokenizer 클래스 / .counTokens() / .hasMoreTokens() / .nextToken() (0) | 2018.06.16 |
댓글