[Java][time] 날짜와 시간 : Calendar, Date

2022. 6. 16. 14:26JAVA/Language

1. Calendar와 Date

  • java.util.Date 클래스 : 날짜와 시간을 다룰 목적으로 JDK 1.0부터 제공되어온 클래스 (deprecated)
  • java.util.Calendar 클래스 : 날짜와 시간을 다룰 목적으로 JDK 1.1부터 제공되어온 클래스

Calendar 클래스의 객체 생성

Calendar는 추상 클래스이기 때문에 직접 객체를 생성할 수 없습니다. 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 합니다.

Calendar cal = Calendar.getInstance();

 

Date와 Calendar간의 변환

1. Calendar를 Date로 변환

Calendar cal = Calendar.getInstnace();
...
Date d = new Date(cal.getTimeInMillis()); // Date(long date)

2. Date를 Calendar로 변환

Date d = new Date();
...
Calendar cal = Calendar.getInstance();
cal.setTime(d);

 

2. Calendar 클래스 활용

import java.util.Calendar;

public class CalendarEx1 {
	public static void main(String[] args) {
		// 기본적으로 현재날짜와 시간으로 설정됨
		Calendar today = Calendar.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));
		
		// Calendar.DATE와 Calendar.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));
		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초)
		// 3,600,000 (1시간 = 3600초 = 3600초 * 1000)
		System.out.println("TimeZone(-12~+12)    : " + (today.get(Calendar.ZONE_OFFSET) / (60*60*1000)));
		System.out.println("이 달의 마지막 날         : " + today.getActualMaximum(Calendar.DATE));
		
		
		
		
		
	}
}
실행결과
이 해의 년도      : 2022
월(0~11, 0:1월) : 5
이 해의 몇 째 주   : 25
이 달의 몇 째 주   : 3
이 달의 몇 일            : 16
이 달의 몇 일            : 16
이 해의 몇 일            : 167
요일(1~7, 1:일요일)      : 5
이 달의 몇 째 요일        : 3
오전_오후(0:오전, 1:오후)  : 1
시간(0~11)             : 2
시간(0~23)             : 14
분(0~59)              : 23
초(0~59)              : 34
1000분의 1초(0~999)    : 15
TimeZone(-12~+12)    : 9
이 달의 마지막 날         : 30

 

References

source code : https://github.com/yonghwankim-dev/java_study/tree/main/ch10/ex_01_calendar
[도서] Java의 정석, 남궁 성 지음