ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바기초] 날짜 클래스 GregorianCalender 정리노트
    º Language º/Java 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();
    			}
    		}
    	}
    }

     

Coder yein