(추상 클래스 : 미완성된 클래스)
Calendar ob = new Calendar();
→ 이와 같은 구문을 통해 인스턴스 생성 불가!
Calendar ob1 = Calendar.getInstance();
→ .getInstance()는 정적 메소드이다 정적메소드는 static 메소드
Calendar ob2 = new GregorianCalendar();
→그래고리언은 캘린더의 자식 클래스겠구나~~ (업캐스팅)
GregorianCalendar ob3 = new GregorianCalendar();
(※ GregorianCalendar : Calendar 클래스의 하위 클래스)
*/
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test138
{
public static void main(String[] args)
{
// Calendar 클래스 기반 인스턴스 생성
//Calendar rightNow = new Calendar();
Calendar rightNow = Calendar.getInstance(); //--1번 방법
// 생성된 달력(Calendar) 인스턴스를 통해
// 날짜 관련 정보를 얻어낼 수 있는 메소드 → 『get()』
int y = rightNow.get(Calendar.YEAR); // static final(상수 변수)
System.out.println(y);
//--==>> 2021
int m = rightNow.get(Calendar.MONTH) + 1; //배열의 인덱스 구조를 갖고 있기 때문에
System.out.println(m); // ★『+1』★ 해야해~!! //--check~!!!
//--==>> 8
int d = rightNow.get(Calendar.DATE);
System.out.println(d);
//--==>> 10
int w = rightNow.get(Calendar.DAY_OF_WEEK);
System.out.println(w);
//--==>> 3
System.out.println(y + "-" + m + "-" + d + " " + w);
//--==>> 2021-8-10 3
//테스트
System.out.println(Calendar.SUNDAY); //--==>>1 -> 일요일
System.out.println(Calendar.MONDAY); //--==>>2 -> 월요일
System.out.println(Calendar.TUESDAY); //--==>>3 -> 화요일
System.out.println(Calendar.WEDNESDAY); //--==>>4 -> 수요일
System.out.println(Calendar.THURSDAY); //--==>>5 -> 목요일
System.out.println(Calendar.FRIDAY); //--==>>6 -> 금요일
System.out.println(Calendar.SATURDAY); //--==>>7 -> 토요일
System.out.println();
String week = "";
switch (w)
{
//case 1: week = "일요일"; break;
case Calendar.SUNDAY: week = "일요일"; break;
//case 2: week = "월요일"; break;
case Calendar.MONDAY: week = "월요일"; break;
//case 3: week = "화요일"; break;
case Calendar.TUESDAY: week = "화요일"; break;
//case 4: week = "수요일"; break;
case Calendar.WEDNESDAY: week = "수요일"; break;
//case 5: week = "목요일"; break;
case Calendar.THURSDAY: week = "목요일"; break;
//case 6: week = "금요일"; break;
case Calendar.FRIDAY: week = "금요일"; break;
//case 7: week = "토요일"; break;
case Calendar.SATURDAY: week = "토요일"; break;
}
System.out.println(y + "-" + m + "-" + d + " " + week);
//--==>> 2021-8-10 화요일
/////////////////////////////////////////////////////////////////////////////////////
System.out.println();
//Calendar 객체 생성
Calendar rightNow2 = new GregorianCalendar(); //--2번 방법 -> import구문 써줘야함
String[] week2 = {"일요일","월요일","화요일","수요일","목요일","금요일","토요일"};
// 달력의 날자 세팅 -> 『set()』 메소드 활용
rightNow2.set(2021, 11, 24); //-- ★12월 check~!!!『-1』★ (2021년 12월 24일)
System.out.println(rightNow2.get(Calendar.DAY_OF_WEEK));
//--==>> 6
System.out.println(week2[rightNow2.get(Calendar.DAY_OF_WEEK)-1]); //-- check~!!!
//--==>> 금요일
// 달력의 날짜 세팅 -> 각자의 생년월일
rightNow2.set(1994, 11, 31); //1994 12 31 //-- ★월★ check~!!!
System.out.println(rightNow2.get(Calendar.DAY_OF_WEEK));
//--==>> 7
System.out.println(week2[rightNow2.get(Calendar.DAY_OF_WEEK)-1]);
//--==>> 토요일
}
}
/*
○ java.util.Calendar 클래스는
날짜와 시간을 객체 모델링화 한 클래스로
연, 월, 일, 요일, 시, 분, 초 까지의
시간과 날짜와 관련된 정보를 제공한다.
그리고, Calendar 클래스는 추상 클래스이므로 직접 객체를 생성할 수 없으며
실제적인 메소드 구현은 Calendar 클래스의 서브 클래스인
GregorianCalendar 클래스에 정의되어 있다.
시스템으로부터 현재 시스템 시간 정보를 얻어올 때
getInstance() 라는 정적(static) 메소드를 이용하여 객체를 생성할 수 있다.
생성된 Calendar 클래스 객체는 시스템의 현재 날짜와 시간 정보를 가지며,
이 객체가 생성되면 갖고있는 시간 정보들은
get() 메소드를 이용하여 쉽게 가져올(사용할) 수 있다.
getInstance() 메소드는 내부적으로 GregorianCalendar 객체를 생성하여
돌려주기 때문에 GregorianCalendar 객체를 직접 생성하여 시간 정보를
구할 수도 있다.
*/
//○ 실습 문제
// 사용자로부터 연, 월을 입력받아
// 달력을 그려주는(출력하는) 프로그램을 구현한다.
// 단, 만년 달력이 아니라 Calendar 클래스를 활용하여 작성할 수 있도록 한다.
// 실행 예)
// 연도 입력 : 0
// 연도 입력 : 2021
// 월 입력 : -2
// 월 입력 : 16
// 월 입력 : 8
/*
[ 2021년 8월 ]
일 월 화 수 목 금 토
===========================
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.util.Scanner;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test139
{
public static void main(String[] args) throws IOException
{
//내가 푼거---------------------------------------------------------------------
/*
Calendar rightNow = new GregorianCalendar();
Scanner sc = new Scanner(System.in);
int y,m,w;
do
{
System.out.print("연도 입력 : ");
y = sc.nextInt();
}
while (y<=0);
do
{
System.out.print("월 입력 : ");
m = sc.nextInt();
}
while (m<=0 || m>12);
rightNow.set(y,m-1,1); //달력은 무조건 1일부터 시작~!!
int[] months = {31,28,31,30,31,30,31,31,30,31,30,31};
String[] week = {"일요일","월요일","화요일","수요일","목요일","금요일","토요일"};
w = rightNow.get(Calendar.DAY_OF_WEEK);
System.out.println();
System.out.printf("\t[ %d년 %d월 ]\n",y,m);
System.out.println(" 일 월 화 수 목 금 토");
System.out.println(" ===========================");
for (int i=1; i<w; i++) //--check~!!
{
System.out.println(" ");
}
for (int i=1; i<=months[m-1]; i++) //--check~!!
{
System.out.printf("%4d",i);
w++;
if(w%7==1)
System.out.println();
}
if (w%7!=1) //--check~!!
{
System.out.println();
}
System.out.println("=============================");
*/
//-------------- Calendar 의 getActualMaximum() 메소드를 사용해서 푼 것---------
//BufferedReader 인스턴스 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// Calendar 인스턴스 생성
Calendar cal = Calendar.getInstance();
//주요 변수 선언
int y, m; //--년, 월
int w; //-- 요일
int i; //-- 달력을 그리는 과정에서 사용하게될 변수
do
{
System.out.print("연도 입력 : ");
y = Integer.parseInt(br.readLine());
}
while (y<1);
do
{
System.out.print("월 입력 : ");
m = Integer.parseInt(br.readLine());
}
while (m<1 || m>12);
// 사용자로부터 입력받은 연(y), 월(m) 이용하여
// 달력의 날자 세팅
cal.set(y,m-1,1); //-- check~!!! 월 -1 해주고 일에 1일의 요일 알아야하니까 1입력!!
//--- 월 구성 시 입력값(m)을 그대로 사용하는 것이 아니라
// 입력값에서 1을 뺀 값으로 월을 설정해야 한다.
//--- 일 구성 시 입력받은 연, 월에 해당하는 1일로 설정해야 한다.
// 그 날의 요일 확인을 위해서...
// 요일 가져오기
w = cal.get(Calendar.DAY_OF_WEEK);
//테스트
//System.out.println(w);
//--==>> 연도 입력 : 2021
// 월 입력 : 8
// 1 -> 2021년 8월 기준 -> 일요일 -> 2021년 8월 1일은 일요일~!!!
System.out.println();
System.out.println("\t[ " + y + "년 " + m + "월 ]\n");
System.out.println(" 일 월 화 수 목 금 토");
System.out.println(" ===========================");
// 빈칸 공백 발생
for (i=1; i<w; i++)
System.out.print(" ");
//테스트
//System.out.printf("%4d",1); //1이 찍히는 위치 테스트
// ※ Calendar 의 getActualMaximum() 메소드
//System.out.println(cal.getActualMaximum(Calendar.DATE));
//for (i=1; i<=그월의 마지막 날짜;i++)
for (i=1; i<=cal.getActualMaximum(Calendar.DATE); i++)
{
System.out.printf("%4d",i);
w++; //--반복문을 수행하며 날짜가 증가할 때마다 요일도 함께 증가할 수 있도록 처리
if(w%7==1) //전에 했던건 0이었는데 여기선 1!!! 왜냐면 일요일이 1이니까!!
System.out.println(); //--증가한 요일이 일요일이 될 때 마다 개행 후 출력
}
if(w%7!=1)
System.out.println();
System.out.println(" ===========================");
//1년 1월 1일이 월요일로 배웠는데 이거로 해보면 토요일이 나오는데 왜그런건가요?
// -> GregorianCalendar는 1년 1월 1일이 월요일 아님!! (그레고리력 검색)
}
}
/*
연도 입력 : 0
연도 입력 : 2021
월 입력 : 0
월 입력 : 13
월 입력 : -2
월 입력 : 8
[ 2021년 8월 ]
일 월 화 수 목 금 토
===========================
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
=============================
계속하려면 아무 키나 누르십시오 . . .
*/