º Language º/Java

[자바기초] 날짜 클래스 GregorianCalender 정리노트

Poony 2023. 4. 1. 16:15

 

* 날짜와 관련된 클래스 ( 년, 월, 일,  시, 분, 초 , 요일)

 

1. Date

2. Calendar

3. GregorianCalenedar

 

자바에서 날짜와 관련된 클래스는 세 가지로 사용이 가능합니다.

 요즘은 Date보다는 Calendar, GregorianCalendar가 사용되고 있습니다.

 

자, 그럼 자주 사용되는 GregorianCalendar 사용 방법을 알려드리겠습니다. 이것만 알고있어도 됩니다.

여러 가지의 메소드들 중 자주 사용 되는 부분을 짚도록 하겠습니다.

 

* GregorianCalendar  기초 설명

import java.util.Calendar;
import java.util.GregorianCalendar;

public class GregorianCalendarTest01 {

	public static void main(String[] args) {
		String []str= {"","일","월","화","수","목","금","토"};
		GregorianCalendar today = new GregorianCalendar();
		int yy = today.get(Calendar.YEAR);	//년
		int mm = today.get(Calendar.MONTH);	//월
		int dd = today.get(Calendar.DAY_OF_MONTH);	//일
		int hh = today.get(Calendar.HOUR_OF_DAY);	//시
		int MM = today.get(Calendar.MINUTE);	//분	
		int ss = today.get(Calendar.SECOND);	//초
     	        int dy = today.get(Calendar.DAY_OF_WEEK);	//요일
		String day = str[dy];	//요일의 정수값을 String으로 변환
		
		String result = String.format("%d년 %d월 %d일(%s요일) %d시 %d분 %d초", 
				yy,mm,dd,day,hh,MM,ss);
		System.out.println(result);
	}

}

> 캘린더의 기본 메소드들입니다. 캘린더 메소드들의 연월일시간등 메소드를 사용하는 방법을 하나씩 알아봅시다.

 

 

 

1. 우선 그레고리언캘린더를 참조변수 자료형으로 선언할때 import를  해주고 객체를 생성합니다.

GregorianCalendar today = new GregorianCalendar();

 

 

2. 필요한 캘린더 메서드들을 불러옵니다.

		int yy = today.get(Calendar.YEAR);
		int mm = today.get(Calendar.MONTH);
		int dd = today.get(Calendar.DAY_OF_MONTH);
		int hh = today.get(Calendar.HOUR_OF_DAY);
		int MM = today.get(Calendar.MINUTE);
		int ss = today.get(Calendar.SECOND);
		int dy = today.get(Calendar.DAY_OF_WEEK);

> 맨 아래 dy(요일)을 보게되면 이 값은 int(정수)형으로 출력되기에  출력시에는 String(문자열)으로 변환해주어야 합니다.

 

 

 

3. 요일은 타입을 변환시켜 출력합니다.

String []str= {"","일","월","화","수","목","금","토"};
String day = str[dy];

> str 배열의 요소값으로 [dy]를 넣어주어 문자열 변수(String day)로 변환합니다.

이때 주의점은 캘린더는 1부터 일요일로 시작하기에 앞의 배열 str[0] 요소는 빈공백으로 두어야 합니다.

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

 

 

 

4. 마지막으로,  ' 년, 월, 일, 시, 분, 초 , 요일' 을 출력해보도록 하겠습니다.

String result = String.format("%d년 %d월 %d일(%s요일) %d시 %d분 %d초", 
				yy,mm+1,dd,day,hh,MM,ss);
		System.out.println(result);

> 출력문에서  MONTH에는 +1을 항상 해주어야 합니다. 자바에서 이전 달로 나타게끔 설정해두었기 때문입니다.

> String result = String.fomat() 은 System.out.printf()로 사용해도 무방합니다.

 

 

 

2023년 4월 1일(토요일) 14시 49분 15초

> 결과 값을  보면 출력할 때마다 변하는 현재 시간을 확인하실 수 있습니다.

 

 

연습)

1. 사용자한테 연, 월, 일을 받아 그 날짜의 요일을 출력하는 프로그램을 작성해봅시다.

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int yy,mm,dd;
		
		System.out.println("년을 입력하세요");
		yy = sc.nextInt();
		System.out.println("월을 입력하세요");
		mm = sc.nextInt();
		System.out.println("일을 입력하세요");
		dd = sc.nextInt();
		
		GregorianCalendar cal = new GregorianCalendar(yy,mm-1,dd);
		String []arr = {"","일","월","화","수","목","금","토"};
		int dy = cal.get(Calendar.DAY_OF_WEEK);
		String str = arr[dy];
		
		System.out.printf("%d년 %d월 %s일은 %s요일 입니다.",yy,mm,dd,str);
		
	}

> 여기서 주의 할 점은 달력을 기준으로 실제 해당 월을 확인하기위해 출력문에  +1을 해야했었지만,

사용자값으로  해당 월을 받아 출력하고자 할때에는 반대로 자바에게 맞춰 -1을 해주어야 제 값이 출력됩니다.

 

 

 

2. 캘린더라는 이름에 걸맞게 캘린더를 만들어보도록 합시다.

package gregorianCalender;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class aa {

	public static void main(String[] args) {
		// 그레고리언 객체생성 및 달력의 년, 월 출력
		GregorianCalendar today = new GregorianCalendar();
		int yy = today.get(Calendar.YEAR);
		int mm = today.get(Calendar.MONTH);
		System.out.printf("%d년 %d월\n",yy,mm+1);
		
		// 달력의 요일을 일정 간격으로 출력
		String []str = {"일","월","화","수","목","금","토"};
		for(String s:str) {
			System.out.printf("%-3s",s);	
		}
		System.out.println();
		
		// 달력모양을 만들기 위해 해당 년, 월 1일을 기준으로 시작일과 마지막일을 구함
		GregorianCalendar startday = new GregorianCalendar(yy,mm,1);
		int dy = startday.get(Calendar.DAY_OF_WEEK);
        
		// getActualMaximum은 해당 달의 마지막 날을 구합니다.
		int last = startday.getActualMaximum(Calendar.DAY_OF_MONTH);
		
		// 달력에서 1일 전 빈공간을 출력해주기 위한 반복문
		for(int i=1; i<dy;i++) {
			System.out.printf("%-3c",' ');
		}
         	// 달력에 빈 공간을 포함하여 마지막 일자까지 7일을 기준으로 
           	 줄을 바꿔숫자를 표현해주기 위한 반복문
		for (int i = 1; i <= last; i++) {
			System.out.printf("%-3d",i);
			if((i+dy-1) % 7 == 0) {		
				System.out.println();
			}
		}
	}
}