[Java] 자바 - Calendar클래스로 날짜와 시간 다루기
자바 - Calendar클래스로 날짜와 시간 다루기
Calendar클래스는 년, 월, 일, 요일의 날짜와 시, 분, 초, 밀리초단위의 시간을 다룰 수 있는 클래스로, get() 메소드와 set() 메소드를 통해 날짜와 시간을 가져오거나 설정할 수 있습니다. 예제를 통해 Calendar 클래스의 사용법에 대해서 알아보도록 하겠습니다.
목차
- Calendar 객체 생성하기
- get() 메소드로 날짜 정보 가져오기
- get() 메소드로 시간 정보 가져오기
- set() 메소드로 날짜와 시간 설정하기
- 사용예제 - 두 날짜 차이 구하기
1. Calendar 객체 생성하기
Calendar객체는 추상클래스로 new 연산자를 통해 객체를 생성할 수 없습니다. 대신에 아래와 같이 getInstance() 메소드를 통해 Calendar객체를 얻을 수가 있습니다. 이때 getInstance()가 반환해준 객체를 통해 사용자는 현재의 날짜와 시간 정보를 알 수 있습니다.
Calendar c1 = Calendar.getInstance();
2. get() 메서드로 날짜 정보 가져오기
앞서 getInstance()를 통해 얻은 Calendar객체의 get() 메소드를 이용하여 날짜 정보를 얻을 수 있습니다.
- get(Calendar.YEAR) : 연도
- get(Calendar.MONTH) : 월 (0부터 시작함, 0~11)
- get(Calendar.DATE) : 일
- get(Calendar.DAY_OF_YEAR) : 해당 연도의 첫날(1월 1일) ~ 현재일까지의 일수
- get(Calendar.DAY_OF_MONTH) : 해당월의 첫날(1일) ~ 현재일까지의 일수
- get(Calendar.DAY_OF_WEEK) : 해당주의 첫날 ~ 현재일까지의 일수 (일,월,화,수,목,금,토 순)
- get(Calendar.DAY_OF_WEEK_IN_MONTH) : 현재요일에 대해 해당 월의 첫 번째 요일 ~ 현재 요일의 수
- get(Calendar.WEEK_OF_YEAR) : 올해의 현재주차
- get(Calendar.WEEK_OF_MONTH) : 이번달의 현재주차
(1) 날짜 정보 가져오기 사용예제 (오늘 날짜 : 2022년 7월 21일)
Calendar c1 = Calendar.getInstance();
System.out.println("1: " + c1.get(Calendar.YEAR));
System.out.println("2: " + c1.get(Calendar.MONTH));
System.out.println("3: " + c1.get(Calendar.DATE));
System.out.println("4: " + c1.get(Calendar.DAY_OF_YEAR));
System.out.println("5: " + c1.get(Calendar.DAY_OF_MONTH));
System.out.println("6: " + c1.get(Calendar.DAY_OF_WEEK));
System.out.println("7: " + c1.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.println("8: " + c1.get(Calendar.WEEK_OF_YEAR));
System.out.println("9: " + c1.get(Calendar.WEEK_OF_MONTH));
[실행결과]
1: 2022
2: 6
3: 21
4: 202
5: 21
6: 5
7: 3
8: 30
9: 4
3. get() 메서드로 시간 정보 가져오기
날짜 정보와 마찬가지로 Calendar객체의 get() 메소드를 이용하여 시간 정보 또한 얻을 수 있습니다.
- get(Calendar.HOUR) : 시간 (12시간제, 0 ~ 11로 표시됨)
- get(Calendar.HOUR_OF_DAY) : 시간 (24시간제, 0 ~ 23으로 표시됨)
- get(Calendar.MINUTE) : 분
- get(Calendar.SECOND) : 초
- get(Calendar.MILLISECOND) : 1/1000초
- get(Calendar.AM_PM) : 오전/오후 (오전:0, 오후:1)
(1) 시간 정보 가져오기 사용예제 (현재 시간 : 오후 10시 37분)
Calendar c1 = Calendar.getInstance();
System.out.println("1: " + c1.get(Calendar.HOUR));
System.out.println("2: " + c1.get(Calendar.HOUR_OF_DAY));
System.out.println("3: " + c1.get(Calendar.MINUTE));
System.out.println("4: " + c1.get(Calendar.SECOND));
System.out.println("5: " + c1.get(Calendar.MILLISECOND));
System.out.println("6: " + c1.get(Calendar.AM_PM));
[실행결과]
1: 10
2: 22
3: 37
4: 54
5: 736
6: 1
4. set() 메서드로 날짜와 시간 설정하기
내가 원하는 날짜와 시간 정보를 설정하는 방법은 Calendar객체의 set() 메소드를 이용하여 설정하실 수 있습니다.
- set(2022, 2, 1) : 2022년 3월 1일 설정
- set(Calendar.YEAR, 2022) : 2022년 설정
- set(Calendar.MONTH, 2) : 3월 설정
- set(Calendar.DATE, 1) : 1일 설정
- set(Calendar.HOUR_OF_DAY, 14) : 오후 2시로 설정
- set(Calendar.MINUTE, 45) : 45분으로 설정
- set(Calendar.SECOND, 15) : 15초로 설정
- clear() : 날짜와 시간을 초기화합니다. (1970년 1월 1일 0시 0분 0초)
(1) 날짜와 시간 설정하기 사용예제
cf) SimpleDateFormat은 날짜와 시간을 보기 좋게 나타내기 위해 사용된 클래스입니다.
Calendar c1 = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 aa HH시 mm분 ss초");
c1.clear();
System.out.println("1: " + sdf1.format(c1.getTime()));
c1.set(2000, 11, 31);
System.out.println("2: " + sdf1.format(c1.getTime()));
c1.set(Calendar.YEAR, 2022);
c1.set(Calendar.MONTH, 2);
c1.set(Calendar.DATE, 1);
c1.set(Calendar.HOUR_OF_DAY, 14);
c1.set(Calendar.MINUTE, 45);
c1.set(Calendar.SECOND, 15);
System.out.println("3: " + sdf1.format(c1.getTime()));
[실행결과]
1: 1970년 01월 01일 목요일 오전 00시 00분 00초
2: 2000년 12월 31일 일요일 오전 00시 00분 00초
3: 2022년 03월 01일 화요일 오후 14시 45분 15초
5. 사용예제 - 두 날짜 차이 구하기
아래 예제는 두 개의 날짜가 주어졌을 때, 두 날짜의 일수 차이와 시간 차이를 구하는 예제입니다.
- long getTimeInMillis() : 기준시간으로부터 현재시간을 1/1000초 단위로 반환합니다.
long a = 0;
long b = 0;
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 aa HH시 mm분 ss초");
c1.clear();
c2.clear();
c1.set(2000, 1, 1);
c2.set(2000, 1, 3);
a = c1.getTimeInMillis();
b = c2.getTimeInMillis();
System.out.println("1: " + sdf1.format(c1.getTime()));
System.out.println("2: " + sdf1.format(c2.getTime()));
System.out.println("시간차이: " + (b-a)/(60*60*1000) + "시간");
System.out.println("일수차이: " + (b-a)/(60*60*1000*24) + "일");
[실행결과]
1: 2000년 02월 01일 화요일 오전 00시 00분 00초
2: 2000년 02월 03일 목요일 오전 00시 00분 00초
시간차이: 48시간
일수차이: 2일