Calendar 클래스
- set()으로 날짜와 시간 지정하기
< 날짜 지정 >
월(Month)이 0부터 시작한다는 점에 주의!
Calendar date1 = Calendar.getInstance();
date1.set (2023, 7, 15); // 2023년 8월 15일 (7월 아님)
// date1.set(Calendar.YEAR, 2023);
// date1.set(Calendar.MONTH, 7);
// date1.set(Calendar.DATE, 15);
< 시간 지정 >
Calendar time1 = Calendar.getInstance();
time1.set(Calendar.HOUR_OF_DAY, 10); // time1을 10시 20분 30초로 설정
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 10);
< 예제 1 >
- DAY_OF_WEEK [ date1.get ( Calendar.DAY_OF_WEEK ) ] = DAY_OF_WEEK [ 2 ] = "월"
- 두 날짜간의 차이를 얻으려면? getTimeInMillis() 천분의 일초 단위로 변환
1. 날짜 ➔ 초 바꾸어서 계산
: ( date2.getTimeInMillis() - date1.getTimeInMillis() ) / 1000;
// 단위가 천분의 일초라 1000으로 나눠줘야 함
2. 초 ➔ 날짜로 다시 바꾸기
: 계산한 값 / ( 24(시간) * 60(분) * 60(초) )
< 예제 2 >
- 두 시간간의 차이를 얻으려면? getTimeInMillis() 천분의 일초 단위로 변환
1. 시, 분, 초 ➔ 천분의 일초단위로 바꾸어서 계산
: Math.abs ( time2.getTimeInMillis() - time1.getTimeInMillis() ) / 1000;
// 어느게 더 큰지 몰라서 절대값 붙임 (Math.abs)
2. 초 ➔ 시, 분, 초로 다시 바꾸기
: for (int i =0; i <TIME_UNIT.length; i++) { //TIME_UNIT = { 3600, 60, 1}
tmp += 계산한 값 / TIME_UNIT [ i ] + TIME_UNIT_NAME [ i ]; // __시간 __분 __초
계산한 값 %= TIME_UNIT [ i ];
}
- clear() : Calendar객체의 모든 필드를 초기화
Calendar dt = Calendar.getInstance(); // 현재시간
// Wed Dec 06 21:07:03 KST 2023
System.out.println( new Date( dt.getTimeInMillis() ) );
dt.clear(); // 모든 필드 초기화
// Tue Jan 01 01:01:01 KST 1970
System.out.println( new Date( dt.getTimeInMillis() ) );
- clear(int field) : Calendar객체의 특정 필드를 초기화
Calendar dt = Calendar.getInstance(); // 현재시간
// Wed Dec 06 21:07:03 KST 2023
System.out.println( new Date( dt.getTimeInMillis() ) );
dt.clear(Calendar.SECOND); // 초를 초기화
dt.clear(Calendar.MINUTE); // 분을 초기화
dt.clear(Calendar.HOUR_OF_DAY); // 시간을 초기화
dt.clear(Calendar.HOUR); // 시간을 초기화
// Wed Dec 06 00:00:00 KST 2023
System.out.println( new Date( dt.getTimeInMillis() ) );
- add() : 특정 필드의 값을 증가 또는 감소 (다른 필드에 영향 O)
Calendar date = Calendar.getInstance();
date.clear(); // 모든 필드 초기화
date.set(2020, 7, 31) // 2020년 8월 31일로 설정
date.add(Calendar.DATE, 1); // DATE에 1을 더함 ➔ 2020년 9월 1일 (월 필드에 영향 줌)
date.add(Calendar.MONTH, -8); // MONTH에서 8을 뺌 ➔ 2020년 8월 1일
- roll() : 특정 필드의 값을 증가 또는 감소 (다른 필드에 영향 X)
Calendar date = Calendar.getInstance();
date.clear(); // 모든 필드 초기화
date.set(2020, 7, 31) // 2020년 8월 31일로 설정
date.roll(Calendar.DATE, 1); // DATE에 1을 더함 ➔ 2020년 8월 1일 (날짜만 영향)
date.roll(Calendar.MONTH, -8); // MONTH에서 8을 뺌 ➔ 2020년 12월 1일
< 예제 1 - roll()과 add() 비교 >
< 예제 2 - 달력 >
1. 말일 구하기 : 다음달 1일에서 하루 빼기
2. 1일의 요일 구하기
Date와 Calendar간의 변환
- Date의 메서드는 대부분 deprecated되었지만 여전히 사용
1. Calendar ➔ Date 변환
Calendar cal = Calendar.getInstance();
...
Date d = new Date (cal.getTimeInMillis()); // Date(long date)
2. Date ➔ Calendar 변환
Date d = new Date();
...
Calendar cal = Calendar.getInstance();
cal.setTime(d);