ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 Calendar의 여러가지 기능들
    Java/자바의정석 2023. 2. 23. 23:19
    반응형

    자바에서 우리는 주로 Calendar 클래스를 통하여 날짜를 계산한다. 우선 Calendar 클래스부터 살펴보자

    public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>

    Calendar.java  클래스를 살펴보면 보다 싶이 추상 클래스이다.

    추상크래스 이기 때문에 우리는 getInstance를 통하여 구현된 객체를 얻어와야한다.

     

    Calendar cal = new Calendar(); 
    Calendar cal = Calendar.getInstance();

    위와같이 선언한다면 첫번째 선언은 에러가 발생한다. 이유는 추상클래스임으로 인스턴스 생성이 불가능하다.

    Calendar를 사용하기 위해서는 getInstance를 통하여 구현된 객체를 얻어와야한다는 점 다시 체크하고 살펴보자.

    get() 날짜와 시간 필드 가지고 오기 , int get(int field)

    이와같이 get을 통해 날짜를 불러와 세팅이 가능한데 여러가지 필드들을 표로 정리해서 살펴보자. 

    필드명 설명
    YEAR
    MONTH 월(0부터 시작)
    WEEK_OF_YEAR 1월 1일부터 ~ 지금까지 몇번째 주인지
    WEEK_OF_MONTH 그달의 몇 번째 주
    DATE
    DAY_OF_MONTH 그 달의 몇번째일
    DAY_OF_YEAR 그 해의 몇 번째일
    DAY_OF_WEEK 요일
    DAY_OF_WEEK_IN_MONTH 그 달의 몇 번째 요일

    위와같이 여러가지 필드들이 있다.  이어서 시간에 관한 것도 살펴보자.

    시간 설명
    HOUR 시간(0~11)
    HOUR_OF_DAY 시간(0~23)
    MINUTE
    SECOND
    MILLISECOND 천분의 일초
    ZONE_OFFSET gmt기준 시차(천분의 일초 단위), 한국은 +9
    AM_PM 오전/오후

    이렇게 시간도 함께 확인해보았다. 이제 코드를 통해서 직접 실행해보자.

    아래의 코드는 자바의정석 예제로 나와있는 문제이다.

    package JavaChap10;
    
    import java.util.*;
    
    class Ex10_1 {
        public static void main(String[] args)
        {  // 기본적으로 현재날짜와 시간으로 설정된다.
            //현재가 아니라 다른 날짜로 변경하고 싶다면 get이 아닌 set을 사용해야한다.
            Calendar today = Calendar.getInstance(); //Calendar 객체를 생성 -> 현재 날짜와 시간으로 설정
            System.out.println("이 해의 년도 : " + today.get(Calendar.YEAR));
            System.out.println("월(0~11, 0:1월): " + today.get(Calendar.MONTH));
            System.out.println("이 해의 몇 째 주: "
                    + today.get(Calendar.WEEK_OF_YEAR));
            System.out.println("이 달의 몇 째 주: "
                    + today.get(Calendar.WEEK_OF_MONTH));
            // DATE와 DAY_OF_MONTH는 같다.
            System.out.println("이 달의 몇 일: " + today.get(Calendar.DATE));
            System.out.println("이 달의 몇 일: " + today.get(Calendar.DAY_OF_MONTH));
            System.out.println("이 해의 몇 일: " + today.get(Calendar.DAY_OF_YEAR));
            System.out.println("요일(1~7, 1:일요일): "
                    + today.get(Calendar.DAY_OF_WEEK)); // 1:일요일, 2:월요일, ... 7:토요일
            System.out.println("이 달의 몇 째 요일: "
                    + today.get(Calendar.DAY_OF_WEEK_IN_MONTH));
            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));
            // 천분의 1초를 시간으로 표시하기 위해 3600000으로 나누었다.(1시간 = 60 * 60초)
            System.out.println("TimeZone(-12~+12): "
                    + (today.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
            System.out.println("이 달의 마지막 날: "
                    + today.getActualMaximum(Calendar.DATE) ); // 이 달의 마지막 일을 찾는다.
        }
    }

     

    ================실행결과=====================

    이 해의 년도 : 2023
    월(0~11, 0:1월): 1
    이 해의 몇 째 주: 8
    이 달의 몇 째 주: 4
    이 달의 몇 일: 24
    이 달의 몇 일: 24
    이 해의 몇 일: 55
    요일(1~7, 1:일요일): 6
    이 달의 몇 째 요일: 4
    오전_오후(0:오전, 1:오후): 0
    시간(0~11): 9
    시간(0~23): 9
    분(0~59): 36
    초(0~59): 41
    1000분의 1초(0~999): 594
    TimeZone(-12~+12): 9
    이 달의 마지막 날: 28


     

    우선 Calendar 클래슷 사용하기 위해서

    Calendar today = Calendar.getInstance();

    와같이 getInstance로 객체를 불러와 사용하도록 설정한다.

    System.out.println("이 해의 년도 : " + today.get(Calendar.YEAR));
    System.out.println("월(0~11, 0:1월): " + today.get(Calendar.MONTH));
    System.out.println("이 해의 몇 째 주: " + today.get(Calendar.WEEK_OF_YEAR));
    System.out.println("이 달의 몇 째 주: " + today.get(Calendar.WEEK_OF_MONTH));

    YEAR를 통해 해당 년도를 불러온다. 2023

    MONTH를 통하여 현재 달을 불러온다  : 1 (0부터 시작하기 때문에 +1을 해주어야 현재달)

    WEEK_OF_YEAR를 통하여 1월1일부터 지금까지 몇번째 주인지 계산 : 8

    WEEK_OF_MONTH를 통하여 이달의 몇번째 주인지 계산 : 4

    System.out.println("이 달의 몇 일: " + today.get(Calendar.DATE));
    System.out.println("이 달의 몇 일: " + today.get(Calendar.DAY_OF_MONTH));
    System.out.println("이 해의 몇 일: " + today.get(Calendar.DAY_OF_YEAR));
    System.out.println("요일(1~7, 1:일요일): " + today.get(Calendar.DAY_OF_WEEK)); // 1:일요일, 2:월요일, ... 7:토요일
    System.out.println("이 달의 몇 째 요일: " + today.get(Calendar.DAY_OF_WEEK_IN_MONTH));
    System.out.println("오전_오후(0:오전, 1:오후): " + today.get(Calendar.AM_PM));

    DATE의 경우 DAY_OF_MONT와 같이 이달의 몇 일인지 구하는 기능을 가지고 있다 :24

    DAY_OF_YEAR는 올해의 몇일인지 알려준다 : 55

    DAY_OF_WEEK_IN_MONTH는 이달의 몇 째 요일인지 알려준다. 6

    (1.일요일, 2.월요일 ... 7.토요일 순서로 되어있다)

    AP_PM을 통하여 오전인지 오후 판별이 가능 (오전의 경우 0, 오후인 경우 1)

     

    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));
    // 천분의 1초를 시간으로 표시하기 위해 3600000으로 나누었다.(1시간 = 60 * 60초)
    System.out.println("TimeZone(-12~+12): " + (today.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
    System.out.println("이 달의 마지막 날: " + today.getActualMaximum(Calendar.DATE) ); // 이 달의 마지막 일을 찾는다.

    HOUR를 통하여 시간을 불러온다. 9

    HOUR_OF_DAY를 통하여 시간을 불러온다 : 9 , HOUR_OF_DAY의 시간 기준은 0~23을 기준으로 한다.

    MINUTE을 통하여 분을 불러온다 : 41

    MILLISECOND를 통하여 천분의 1단위의 초를 구할수 있다.

    반응형

    댓글

Designed by Tistory.