코드일기장

[Java] Calendar 클래스 본문

Java

[Java] Calendar 클래스

won_hyeok2 2022. 2. 25. 20:21

 

 

날짜와 시간을 다루는 클래스는 JDK 1.0에 제공된 Date라는 클래스가 있었다. Date 클래스는 옛날 클래스인지라 기능이 매우 적었다. 그래서 JDK 1.1에 새로 생긴 게 Calendar클래스이다. Calendar 클래스는 Date클래스에 없는 기능들을 새로 추가하였다. 하지만 Calendar클래스는 단점들이 발견되어, JDK 1.8부터 'java.time' 패키지를 새로 만들어 기존에 있던 Calendar클래스를 보안하였다.

time패키지를 배우기 전 Calendar클래스는 기존부터 많이 사용하던 클래스라 배워두면 좋다.

 

Date클래스와  Calendar클래스의 대표적인 단점은 날짜와 시간을 같이 다룬다는 단점이 있었다.

이 단점도 time패키지의 등장으로 어느 정도 수월하게 날짜와 시간을 따로 다룰 수 있게 되었다.

 

 


 

 

Calendar 클래스는 추상 클래스이다. 추상 클래스이므로 인스턴스를 생성할 수가 없다.

그래서 getInstance() 메서드를 통해 구현된 객체를 얻어야 한다.

 

인스턴스를 직접 생성하지 못하고 메서드를 통해 인스턴스 객체를 얻어야 하는 이유는 최소한의 변경으로 프로그램이 동작할 수 있도록 하기 위한 것이다.

 

import java.util.Calendar;

public class TimeSet {

	public static void main(String[] args) {
		Calendar cal = new Calendar(); // 에러! 추상클래스라 인스턴스 생성 불가.
		Calendar cal2 = Calendar.getInstance();

	}
}

 

 

Calendar.getInstance() 객체를 반환할 때 반환되는 객체는 크게 3가지의 종류로 나뉜다.

 

1. 서양력-GregorianCalendar

2. 불교력-BuddhistCalendar 

3. 일본력

 

우리나라는 서양력을 사용하여 new GregorianCalendar()를 반환한다.

 

 

 


 

 

get()으로 날짜와 시간 필드 가져오기 - int get(int field)

 

import java.util.Calendar;

public class TimeSet {

	public static void main(String[] args) {
		Calendar cal2 = Calendar.getInstance();
		int Year = cal2.get(Calendar.YEAR); // 년도 가져옴
		int month = cal2.get(Calendar.MONTH);//몇월인지 가지고 옴
		int day = cal2.get(Calendar.DATE); // 날짜 가지고 옴
		int lastDay = cal2.getActualMaximum(Calendar.DATE);//이 달의 마지막 날

		System.out.println(Year);
		System.out.println(month);
		System.out.println(day);
		System.out.println(lastDay);
	}

}
2022
1
25
31

Calendar에 정의된 필드는 다양하지만 지금은 적게 작성해보겠다.

 

 

 

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

날짜 관련 필드

 

 

 

위 표를 보면 MONTH필드는 0부터 시작한다. 즉, 배열의 index와 같은 개념이다.

1월은 =0이고

2월은 =1이다.

 

필드들은

기본적인 패턴이 있다.

 

 

 

필드명 설명
HOUR 시간 (0~11)
HOUR_OF_DAY 시간 (0~23)
MINUTE
SECOND
MILLISECOND 천분의 일초
ZONE_OFFSET GMT기준 시차(천분의 일초 단위)
AM_PM 오전/오후

시간 관련 필드

 

 

 

 


 

 

 

 

 

 

🎈 지금까지 공부한 내용으로 코드 작성


더보기
package weon;

import java.util.Calendar;

public class TimeSet {

	public static void main(String[] args) {
		// 현재 2022-02-25
		Calendar cal = Calendar.getInstance(); // Calendar 객체 생성
		System.out.println("올해의 년도: " + cal.get(Calendar.YEAR));
		System.out.println("현재 몇월인가(0~11): " + (cal.get(Calendar.MONTH) + 1));
		System.out.println("올해의 몇 번째 주인가: " + cal.get(Calendar.WEEK_OF_YEAR));
		System.out.println("이 달의 몇 번째 주인가: " + cal.get(Calendar.WEEK_OF_MONTH));

		System.out.println("이번주의 몇 일인가: " + cal.get(Calendar.DAY_OF_WEEK));
		System.out.println("이 달의 몇 일인가: " + cal.get(Calendar.DAY_OF_MONTH));
		System.out.println("올해의 몇 일인가: " + cal.get(Calendar.DAY_OF_YEAR));

		System.out.println("요일(1~7 1:일요일): " + cal.get(Calendar.DAY_OF_WEEK));
		System.out.println("이 달의 몇번 째 주인가: " + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));

		System.out.println("오전/오후(오전=0,오후=1): " + cal.get(Calendar.AM_PM));

		System.out.println("시간(0~11): " + cal.get(Calendar.HOUR));
		System.out.println("시간(0~23): " + cal.get(Calendar.HOUR_OF_DAY));

		System.out.println("분(0~59): " + cal.get(Calendar.MINUTE));
		System.out.println("초(0~59): " + cal.get(Calendar.SECOND));
		System.out.println("1000분의 1초(ms): " + cal.get(Calendar.MILLISECOND));
		System.out.println("TimeZone(-12~+12): " + cal.get(Calendar.ZONE_OFFSET) / (60 * 60 * 10000));

		System.out.println("이 달의 마지막 일:" + cal.getActualMaximum(Calendar.DAY_OF_MONTH));

	}

}

 

 

올해의 년도: 2022
현재 몇월인가(0~11): 2
올해의 몇 번째 주인가: 9
이 달의 몇 번째 주인가: 4
이번주의 몇 일인가: 6
이 달의 몇 일인가: 25
올해의 몇 일인가: 56
요일(1~7 1:일요일): 6
이 달의 몇번 째 주인가: 4
오전/오후(오전=0,오후=1): 1
시간(0~11): 8
시간(0~23): 20
분(0~59): 17
초(0~59): 34
1000분의 1초(ms): 7
TimeZone(-12~+12): 0
이 달의 마지막 일:28

 

 

 

 

 

 

커버사진

https://www.flaticon.com/kr/free-icon/java_226777

<a href="https://www.flaticon.com/kr/free-icons/" title="자바 아이콘">자바 아이콘  제작자: Freepik - Flaticon</a>

Comments