/ JAVAJUNGSUK

Ch10-1~3. Calendar 클래스

자바의 정석 기초편

0. 목차



Chapter10. 날짜와 시간 & 형식화

Ch10 - 1. 날짜와 시간

Ch10 - 2. Calendar 클래스

Ch10 - 3. Calendar 클래스 예제1



Ch10 - 1. 날짜와 시간


▶ java.util.Date 클래스란?

▷ 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0)
▷ Date의 메서드는 거의 deprecated 되었지만, 여전히 사용


▶ java.util.Calendar 클래스란?

▷ Date 클래스를 개선한 새로운 클래스(JDK1.1)
▷ 그러나 여전히 단점 존재


▶ java.time 패키지란?

▷ Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK1.8 = java8)
▷ Date와 Calendar의 단점 : 날짜와 시간을 같이 다룸
▷ java.time 패키지 : 날짜와 시간을 구분
  • 날짜만 사용 - LocalDate 클래스
  • 시간만 사용 - LocalTime 클래스
  • 날짜 + 시간 둘 다 사용 - LocalCateTime 클래스



Ch10 - 2. Calendar 클래스


▶ Calendar 클래스란?

▷ 추상 클래스
▷ getInsance()를 통해 구현 된 객체를 얻어야 함
  • Calendar cal = new Calendar(); // ERROR! 추상 클래스 객체 생성 불가
  • Calendar cal = Calendar.getInstance();
    • 이렇게 호출하면 Calendar 클래스를 구현한 클래스의 인스턴스를 반환
    • 우리는 ① 서양력 ② 불교력 ③ 일본력 中 ① 서양력을 사용
    • 그래서 getInsance()로 호출하면 GregorianCalendar 클래스의 인스턴스 반환

  • Calendar cal new GregorianCalendar(); 이렇게 호출하지 않는 이유
    • 특정 Calendar 클래스를 지정해서 호출하면,
    • 사용자가 다른 Calendar를 사용하게 될 때, 호출한 부분을 수정해야 함
    • 그래서 Calendar cal = Calendar.getInstance();와 같이
    • 상황에 따라 알맞는 Calendar를 반환 하는 코드가 좋은 것



Ch10 - 3. Calendar 클래스 예제1


▶ get()는?

▷ get()로 날짜와 시간 필드 가져올 수 있음

int get(int field)

▷ set()로 날짜와 시간 필드를 변경할 수 있음


▶ 실습

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

현재 날짜와 시간으로 세팅

▷ 올해의 년도?
int thisYear = cal.get(Calendar.YEAR);

// console
2021
▷ 이 달의 마지막 날?
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE);

// console
31


▶ Calendar에 정의 된 필드1 : 날짜 관련

▷ YEAR : 년도
int thisYear = cal.get(Calendar.YEAR);

// console
2021


▷ MONTH : 월(0부터 시작) → ‘0’이 있기 때문에 -1 해 주어야 함(7월 = 6월)
int thisMonth = cal.get(Calendar.MONTH);

// console
6


▷ WEEK_OF_MONTH : 그 달의 1일 부터 현재까지가 몇 번째 주인지
int thisWeekOfMonth = cal.get(Calendar.WEEK_OF_MONTH);

// console
4


▷ WEEK_OF_YEAR : 1월 1일 부터 현재까지가 몇 번째 주인지
int thisWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR);

// console
30


▷ DATE : 일
int thisDate = cal.get(Calendar.DATE);

// console
22


▷ DAY_OF_MONTH : 그 달의 몇 번째 일인지
int thisDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

// console
22


▷ DAY_OF_YEAR : 그 해의 몇 번째 일인지
int thisDayOfYear = cal.get(Calendar.DAY_OF_YEAR);

// console
203


▷ DAY_OF_WEEK : 요일(1-일, 2-월, 3-화, 4-수, 5-목, 6-금, 7-토)
int thisDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

// console
5


▷ DAY_OF_WEEK_IN_MONTH : 그 달의 몇 번째 요일인지
int thisDayOfWeekInMonth = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);

// console
4



▶ Calendar에 정의 된 필드2 : 시간 관련

▷ HOUR : 시간(0~11)
int thisHour = cal.get(Calendar.HOUR);

// console
8


▷ HOUR_OF_DAY : 시간(0~23)
int thisHourOfDay = cal.get(Calendar.HOUR_OF_DAY);

// console
20


▷ MINUTE : 분
int thisMinute = cal.get(Calendar.MINUTE);

// console
50


▷ SECOND : 초
int thisSecond = cal.get(Calendar.SECOND);

// console
12


▷ MILLISECOND : 1/1000초
int thisMilliSecond = cal.get(Calendar.MILLISECOND);

// console
181


▷ ZONE_OFFSET : GMT기준 시차(1/1000초 단위) - 한국은 GMT + 9
int thisZoneOffset = cal.get(Calendar.ZONE_OFFSET);

// console
32400000


▷ AM_PM : 오전_오후
int thisAmPm = cal.get(Calendar.AM_PM);

// console
1