-
자바 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단위의 초를 구할수 있다.
반응형'Java > 자바의정석' 카테고리의 다른 글
자바 예제로 살펴보는 Calendar 여러가지 기능들(2) (0) 2023.02.23 자바 예제로 살펴보는 Calendar 여러가지 기능들(1) (0) 2023.02.23 Math메서드, Round(), Rint() 비교하기 (0) 2023.02.22 Wrapper클래스란? (0) 2023.02.22 자바 Math의 주요 메서드 (0) 2023.02.22