DAY10(1) - Calendar

은나현·2023년 2월 3일
0

📌 1. Calendar 클래스

📍 1-1. 날짜/시간 기능 지원

  • Calendar 클래스는 java.util에 속하는 기본 제공 클래스로, 날짜와 시간에 관련된 기능들을 제공한다.
  • singleton 객체 형식으로 만들어져 있어 객체 생성 없이도 기능들을 사용할 수 있다. new키워드를 사용한 객체 생성은 불가능하다.
    • getInstance()를 사용해 Calendar 객체를 받아올 수 있다.
      Calendar cal = Calendar.getInstance();

📍 1-2. Calendar 주요 상수

  • 아래 모든 상수는 static int 형 상수이다.

  • 사용할 때는 Calendar.상수명 형태로 사용한다.

    상수의미
    YEAR현재 년도
    MONTH현재 월 (0부터 시작함에 주의 / +1해서 사용)
    DATE현재 날짜
    WEEK_OF_YEAR현재 년도의 몇째 주
    WEEK_OF_MONTH현재 월의 몇째 주
    DAY_OF_YEAR현재 년도의 며칠째
    DAY_OF_MONTH현재 월의 며칠째
    DAY_OF_WEEK현재 요일(일요일[1]~토요일[7]
    HOUR현재 시간(12시간제)
    HOUR_OF_DAY현재 시간(24시간제)
    MINUTE현재 분
    SECOND현재 초
    AM_PM현재 시간대(오전[0],오후[1])

📍 1-3. Calendar 주요 메소드

  • .add(int field, int amount)

    • 필드와 값을 설정하면 해당 필드에 입력한 값만큼을 더하는 메소드.
      		Calendar cal = Calendar.getInstance();
         		// 현재 설정된 날짜&시간을 출력하는 임의 메소드
      		DatePrinter.printDateTime(cal);		
        	----------------------------------------------------------------
      		cal.add(Calendar.DAY_OF_MONTH,100);
      		DatePrinter.printDateTime(cal);
         ----------------------------------------------------------------
         		// 출력결과 
         		2023년 02월 03일 13시 48분 32초
      		2023년 05월 14일 13시 48분 32초
         // 100일 후의 날짜값을 출력한다. 
  • .set(int field, int value)

    • 필드와 값을 설정하면 해당 필드 값을 입력한 값으로 설정하는 메소드.
      		Calendar cal = Calendar.getInstance();
         		// 현재 설정된 날짜&시간을 출력하는 임의 메소드
      		DatePrinter.printDateTime(cal);		
        	----------------------------------------------------------------
      		cal.set(Calendar.YEAR, 2020);
      		DatePrinter.printDateTime(cal);
         ----------------------------------------------------------------
         		// 출력결과 
         		2023년 02월 03일 13시 48분 32초
      		2020년 02월 03일 13시 48분 32초
         // 연도를 2020으로 set하여 출력한다.
    • 이외에도 set을 사용해 날짜를 세팅하는 몇 가지 방법이 있다.
      • set​(int year, int month, int date)
        - 필드값을 설정하지 않고 변수만 3개를 입력하면 차례로 연, 월, 일 값으로 설정된다.
      	cal.set(1982, 5, 17);
      	DatePrinter.printDateTime(cal);
      	----------------------------------------------------------------
        	// 출력결과 
        	1982년 05월 17일 13시 48분 32초
      • set​(int year, int month, int date, int hourOfDay, int minute)
        • 필드값을 설정하지 않고 변수만 5개를 입력하면 차례로 연, 월, 일, 시간, 분 값으로 설정된다.
      	cal.set(1982, 5, 17, 1, 2);
      	DatePrinter.printDateTime(cal);
      	----------------------------------------------------------------
        	// 출력결과 
        	1982년 05월 17일 01시 02분 32초
      • set​(int year, int month, int date, int hourOfDay, int minute, int second)
        • 필드값을 설정하지 않고 변수만 6개를 입력하면 차례로 연, 월, 일, 시간, 분, 초 값으로 설정된다.
      	cal.set(1982, 5, 17, 1, 2, 3);
      	DatePrinter.printDateTime(cal);
      	----------------------------------------------------------------
        	// 출력결과 
        	1982년 05월 17일 01시 02분 03초
  • getActualMaximum​(int field)

    • 입력한 필드의 최대값을 반환한다.
    		int week_count = cal.getActualMaximum( Calendar.WEEK_OF_MONTH );
    		System.out.println(week_count);
     		----------------------------------------------------------------
       		// 출력결과 (4주까지 있는 달에는 4, 5주까지 있는 달에는 5가 출력된다.)
       		5
  • getActualMinimum​(int field)
    • 입력한 필드의 최대값을 반환한다.
    		int first_day = cal.getActualMinimum( Calendar.DAY_OF_MONTH );
    		System.out.println(first_day);
     		----------------------------------------------------------------
       		// 출력결과 
       		1

📍 1-4. Calendar의 사용

  • 요일을 "일" ~ "토" 형태로 가져오기
    • 		//요일 인덱스 가져오기
      		int day = cal.get(Calendar.DAY_OF_WEEK);
      		System.out.println("요일 인덱스 = " + day);
      		// 요일을 출력하기
      		String[] day_name = {"일","월","화","수","목","금","토"};
      		System.out.println(day_name[day-1]);
        		// 요일 인덱스는 1부터 시작하므로 1빼서 day_name 인덱스와 맞춰 준다.
              ---------------------------------------------
              // 출력결과 - 현재 요일에 맞는 인덱스와 요일 이름이 출력된다.
              요일 인덱스 = 6
              금        
  • 프로그램 실행에 걸리는 시간을 밀리세컨드(ms)로 계산하기
    • 밀리세컨드를 얻을 때는 Calendar 클래스를 이용한 .getTimeInMillis() 외에도 System.currentTimeMillis()도 사용할 수 있다.
    		// 현재 시각에 대한 TimeStamp단위를 밀리세컨즈 단위로 얻기
    		long ms1 = cal.getTimeInMillis();
    		System.out.println("파일 복사 시작 >> " + ms1);  		
    		// 프로그램을 주어진 시간 동안 대기하도록 하는 처리
    		try {
    			Thread.sleep(5000);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		// 처리 종료 시각 타임스탬프를 얻는다.
    		long ms2 = System.currentTimeMillis();
    		System.out.println("파일 복사 끝 >> " + ms2);		
    		// 두 시간의 차이 얻기
    		long x = ms2 - ms1;
    		System.out.println(x);		
    		// 1/1000초 이므로, 1000으로 나누면 소요 시간을 얻을 수 있다
    		long y = x / 1000;
    		System.out.println(y + "초 지났음");
            -----------------------------------------------------------
            // 출력결과
            파일 복사 시작 >> 1675407005295
    		파일 복사 끝 >> 1675407010317
    		5022
            5초 지났음

0개의 댓글