ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] Calendar Class
    언어/JAVA 2022. 9. 8. 10:09

    싱글톤 방식의 클래스
    -생성자가 private 으로 접근 차단됨(외부에서 접근 금지.-> 외부에서 new Calendar() 사용 안됨)
    -유일하게 실행된 new Calendar() 는 클래스 내부에서 실행되어 클래스내부에 단하나만 존재하게끔 생성된 레퍼런스 변수에 주소를 저장. 그리고 그 레퍼런스 변수가 갖고 있는 주소를 리턴하는 public static 형태의 getInstance 메서드로  인스턴스의 주소를 리턴 받아 씀.
    -이후 다시 getInstance() 메서드가 실행되도 현재 HEAP 에 이미 있는 인스턴스의 주소가 리턴 됨.

    import java.util.Calendar;
    
    public class CalendarClass01 {
    	public static void main(String[] args) {
    		Calendar today = Calendar.getInstance();
    		Calendar tomorrow = Calendar.getInstance();
    		
    		// 캘린더 클래스에는 스태틱 파이널(static fianl)변수들이 다수 있음
    		System.out.println( Calendar.YEAR );   //1 출력
    		//get 메서드는 스태틱 파이널 변수에 해당하는 날짜요소를 얻어주는 메서드
    		System.out.println("년도 : " + today.get( Calendar.YEAR ));
    		System.out.println("년도 : " + today.get( 1 ));
    				
    		System.out.println( Calendar.MONTH ); 
    		int i = today.get(Calendar.MONTH);
    		System.out.println("월 : (0~11) : "+ i + "월");
    		//MONTH 로 얻어낸 월의 값은 1월이 0   2월이 1 ... 12월이 11로 얻어짐
    		System.out.println("월 : (1~12) : "+ (i+1) + "월");
    		
    		
    		// 1. 일요일, 2. 월요일, 3. 화요일......
    		i = today.get(Calendar.DAY_OF_WEEK);
    		System.out.println("요일(1~7, 1:일요일): " + i);	
    		i = today.get(Calendar.DAY_OF_WEEK_IN_MONTH);
    		System.out.println("이 달의 몇 째 요일: " + i );
    		System.out.println("이 달의 마지막 날: " + today.getActualMaximum(Calendar.DATE) ); 
    		
    		i = today.get(Calendar.DATE);
    		System.out.println("이 달의 몇 일: " + i); 
    		i = today.get(Calendar.WEEK_OF_YEAR);
    		System.out.println("금년의 몇째주 : " + i );
    		i = today.get(Calendar.WEEK_OF_MONTH);
    		System.out.println("이 달의 몇 째 주: " + i); 
    		i = today.get(Calendar.DAY_OF_YEAR);
    		System.out.println("이 해의 몇 일: " + i); 
    			
    		System.out.println("오전_오후(0:오전, 1:오후): " + today.get(Calendar.AM_PM));
    		System.out.println("시간(0~11): " + today.get(Calendar.HOUR));
    		System.out.println("시간(0~23): " + today.get(Calendar.HOUR_OF_DAY));
    		System.out.println("분(0~59): " + today.get(Calendar.MINUTE));
    		System.out.println("초(0~59): " + today.get(Calendar.SECOND));
    		System.out.println("1000분의 1초(0~999): "	+ today.get(Calendar.MILLISECOND));
    		// 프로그램이 시작되어 Calendar 인스턴스가 만들어진 시점
    		// 시:분:초:1/1000 초
    	}
    }

     

    set : 원하는 특정 날짜로 객체내 날짜구성을 재설정, date2 는 아직 오늘 날짜

    import java.util.Calendar;
    
    public class CalendarClass02 {
    	static String [] weekday = {"", "일", "월", "화" , "수", "목", "금", "토"};
    
    	public static void main(String[] args) {
    		Calendar date1 = Calendar.getInstance();
    		Calendar date2 = Calendar.getInstance();
    		
    		// date1 달력객체의 오늘 날짜를 2015년 8월 15일로 설정 
    		date1.set(2015, 7, 15); 
    		
    		// set 메서드에 스태틱 파이널 필드명과 값을 넣어주면 해당 필드값만 변경
    		date1.set(Calendar.MONTH, 6);  // -> 월만 7월로 바뀜
    
    		// 위 date1과 date2 에 설정된 날짜를  "0000년 0월 0일 0요일"  형식으로 출력
    		// System.out.println() 안에 한번에 구성해서 출력
    		prnDate(date1);
    		prnDate(date2);
    		//System.out.println( date1.get(Calendar.YEAR) + "년 " 
    			//		+ ( date1.get(Calendar.MONTH) + 1 ) + "월 " 
    			//		+ date1.get(Calendar.DATE) + "일 "
    			//		+ weekday[ date1.get(Calendar.DAY_OF_WEEK) ] + "요일");
    		
    		//System.out.println( date2.get(Calendar.YEAR) + "년 " 
    			//		+ ( date2.get(Calendar.MONTH) + 1 ) + "월 " 
    			//		+ date2.get(Calendar.DATE) + "일 "
    			//		+ weekday[ date2.get(Calendar.DAY_OF_WEEK) ] + "요일");
    	}
    
    	private static void prnDate(Calendar c) {
    		System.out.println( c.get(Calendar.YEAR) + "년 " 
    				+ ( c.get(Calendar.MONTH) + 1 ) + "월 " 
    				+ c.get(Calendar.DATE) + "일 "
    				+ weekday[ c.get(Calendar.DAY_OF_WEEK) ] + "요일");		
    	}
    }

     

    .getTimeInMillis() : 날짜 시간 모두를 밀리초로 환산하는 매서드

    import java.util.Calendar;
    
    public class CalendarClass03 {
    	public static void main(String[] args) {
    		Calendar time1 = Calendar.getInstance();
    		Calendar time2 = Calendar.getInstance();
    		
    		time1.set(Calendar.HOUR_OF_DAY, 10);
    		time1.set(Calendar.MINUTE, 20);
    		time1.set(Calendar.SECOND, 30);
    		time2.set(Calendar.HOUR_OF_DAY, 20);
    		time2.set(Calendar.MINUTE, 30);
    		time2.set(Calendar.SECOND, 10); 
    		printTime(time1);
    		printTime(time2);
    		
    		System.out.println(time1.getTimeInMillis());
    		System.out.println(time2.getTimeInMillis());
    		
    		long dif = (time2.getTimeInMillis() - time1.getTimeInMillis()) / 1000;
    		// 1000 으로 나누는 건 밀리초단위를 초단위로 환산하기 위함
    		System.out.println("time1과 time2의 차이는 "+ dif +"초 입니다.");
    	}
    	public static void printTime(Calendar c) {
    		System.out.println("time : "
    		          + c.get(Calendar.HOUR_OF_DAY)+"시 " 
    		          + c.get(Calendar.MINUTE) +"분 " 
    		          + c.get(Calendar.SECOND) + "초 "
    		          + c.get(Calendar.MILLISECOND)+"(1/1000 초)");
    	}
    }

     

    기타메서드

    import java.util.Calendar;
    
    public class CalendarClass04 {
    	public static void main(String[] args) {
    		Calendar date = Calendar.getInstance();
    		date.set(2021, 10, 30);  // 전체날짜 또는 일부를 수정하는 메서드 - set
    		System.out.println( toDate(date) );
    		
    		System.out.println("== 1일 후 ==");
    		// 상대적 날자 수정
    		date.add( Calendar.DATE  , 1);
    		System.out.println( toDate(date) );
    		// add 메서드의 증감은 하나의 요소를 변경하지만, 그로인해 다른 필드에 영향을 줄 수 있음. 
    		// 일을 변경하여 달이 바뀌거나, 월을 변경하여 년도가 바뀌는 변경 등
    		
    		System.out.println("== 6달 후 ==");
    		date.add(Calendar.MONTH, 6);
    		System.out.println( toDate(date) );
    		
    		System.out.println("== 7달 전 ==");
    		date.add(Calendar.MONTH, -7);
    		System.out.println( toDate(date) );
    		
    		System.out.println("= 40일 후(roll) =");
    		date.roll( Calendar.DATE , 40 ); 
    		// 다른 필드에 영향을 주지 않고 해당 필드만으로 더하고 빼는 메서드
    		// 11월 1일에서 29일 더하면  11월 30일이 되고, 이후 11일이 더해져 
    		// 다시 11일이 나옴  월에는 영향을 주지 않음 결과 11월 11일
    		System.out.println( toDate(date) );
    		
    	}
    	public static String toDate(Calendar c) {
    		String cDate = c.get(Calendar.YEAR)+"년 " 
    				+ (c.get(Calendar.MONTH)+1) +"월 " 
                	+ c.get(Calendar.DATE) + "일 ";
    		return cDate;
    	}
    }

     

    년도와 월을 입력받고 해당되는 월의 달력 출력(반복실행)

    import java.util.Calendar;
    import java.util.Scanner;
    
    public class CalendarClass05 {
    	public static void main(String[] args) {
    		int year, month; 
            int input=0;
            Scanner sc = new Scanner(System.in);
            System.out.printf("년도 입력 : ");
            year=Integer.parseInt( sc.nextLine() );
            System.out.printf("월 입력 : ");
            month=Integer.parseInt( sc.nextLine() ); 
            
            Calendar sDay = Calendar.getInstance();
            Calendar eDay = Calendar.getInstance();
            while(true) {
    	        sDay.set( year, month-1, 1);   // 입력한 달의 1일자로 날짜 설정
    	        //eDay.set( year, month-1, sDay.getActualMaximum(Calendar.DATE)));
    	        eDay.set( year,  month, 1);      // 입력한 년월의 다음달 1일로 설정
    	        eDay.add( Calendar.DATE, -1);    // 다시 그날의 1일전으로 설정 -> 입력한 년월의 마지막날
    	
    	        int START_WEEK = sDay.get(Calendar.DAY_OF_WEEK); 
    	        // 1일의 요일을 숫자로 얻습니다.   일요일 1, 월요일 2, 화요일 3,.....
    	        // System.out.println( START_WEEK );
    	        
    	        System.out.println("\n" + year + "년  " + month + "월  ");
    	    	System.out.println("---------------------------------------------------");
    	        System.out.println("일\t월\t화\t수\t목\t금\t토");
    	        System.out.println("---------------------------------------------------");
    	        
    	        // 1일자까지 빈칸
    	        for( int i=1; i<START_WEEK; i++) 
    	        	System.out.printf("\t");
    	        // 1일부터 마지막 날짜까지 출력
    	        for( int i=1; i<= eDay.get(Calendar.DATE) ; i++) {
    	        	System.out.printf("%2d\t", i);
    	        	if(START_WEEK++ % 7 == 0) System.out.println();  // 7칸마다 줄바꿈
    	        }
    	        System.out.println("\n---------------------------------------------------");
    
    	        System.out.print("\n[이전달(1)] | [다음달(2)] | [종료(3)]");
    	        input = Integer.parseInt( sc.nextLine() );
    	        if(input==3)break;
    		        
    	        if( input ==1) {
    	        	if(month==1) { 	year--;  month=12;
    	        	}else {	month--; }
    	        }else {
    	        	if(month==12) {	year++;  month=1;
    	        	}else {  month++;  }
    	        }
            }
            System.out.println("프로그램 종료");
    	}
    }

    '언어 > JAVA' 카테고리의 다른 글

    [JAVA] Collection  (0) 2022.09.08
    [JAVA] String Class  (0) 2022.09.08
    [JAVA] Object 클래스  (1) 2022.09.08
    [JAVA] Extends TypeCastion  (0) 2022.09.08
    [JAVA] 상속(Extends)  (0) 2022.09.07

    댓글

Designed by Tistory.