티스토리 뷰



자바/Java Calendar 사용법 (기본예제 포함)  - 2 -



CalendarEx2.java
package arabiannight.tistory.com.calendardate;

import java.util.*;

class CalendarEx2
{
	public static void main(String[] args) 
	{
		// 요일은 1부터 시작하기 때문에, DAY_OF_WEEK[0]은 비워두었다.
		final String[] DAY_OF_WEEK = {"", "일", "월", "화", "수", "목", "금", "토"};

		Calendar date1 = Calendar.getInstance();
		Calendar date2 = Calendar.getInstance();

		// month의 경우 0부터 시작하기 때문에 8월인 경우, 7로 지정해야한다.
        	// date1.set(2005, Calendar.AUGUST, 15);와 같이 할 수도 있다.
		date1.set(2005, 7, 15); // 2005년 8월 15일로 날짜를 설정한다. 
		System.out.println("date1은 "+ toString(date1) + 
				DAY_OF_WEEK[date1.get(Calendar.DAY_OF_WEEK)]+"요일이고,");
		System.out.println("오늘(date2)은 " + toString(date2) + 
				DAY_OF_WEEK[date2.get(Calendar.DAY_OF_WEEK)]+"요일입니다.");

		// 두 날짜간의 차이를 얻으려면, getTimeInMillis()를 이용해서 
		// 천분의 일초 단위로 변환해야한다.
		long difference = (date2.getTimeInMillis() - date1.getTimeInMillis())/1000;
		System.out.println("그 날(date1)부터 지금(date2)까지 " + difference +"초가 지났습니다");
		// 1일 = 24 * 60 * 60
		System.out.println("일(day)로 계산하면 " + difference/(24*60*60) +"일입니다.");	
	}

	public static String toString(Calendar date) {
		return date.get(Calendar.YEAR)+"년 "
				+ (date.get(Calendar.MONTH)+1) + "월 " 
				+ date.get(Calendar.DATE) + "일 ";
	}
}


Result

date1은 2005년 8월 15일 월요일이고,
오늘(date2)은 2012년 5월 15일 화요일입니다.
그 날(date1)부터 지금(date2)까지 212976000초가 지났습니다.
일(day)로 계산하면 2465일입니다.



두 날짜간의 차이를 구하는 예제 입니다. 날짜와 시간을 원하는 값으로 변경하려면 set메서드를 사용하면 됩니다.


[참고] clear()는 모든 필드의 값을, clear(int field)는 지정된 필드의 값을 기본값으로 초기화 한다. 각 필드의 기본값은 JAVA API문서에서 GregorianCalendar를 참고하라.


 void set(int filed, int value)

 void set(int year, int month, int date)

 void set(int year, int month, int date, int hourOfDay, int minute)

 void set(int year, int month, int date, int hourOfDay, int minute, int second)


두 날짜간의 차이를 구하기 위해서는 두 날짜를 최소단위인 초단위로 변경한 다음 그 차이를 구하면 됩니다. 메서드 getTimeInMillis()는 1/1000초 단위로 값을 반환하기 때문에 초단위로 얻기 위해서는 1000으로 나눠 주어야 하고, 일단위로 얻기 위해서는 24(시간) * 60(분) * 60(초) * 1000으로 나누어야 합니다.


예제에서는 변수 difference에 저장할 때 이미 초단위로 변경하였기 때문에 일단위로 변경할 때 24(시간) * 60(분) * 60(초)로만 나누었습니다. 시간상의 전후를 알고 싶을 때는 두 날짜간의 차이가 양수인지 음수인지를 판단하면 될 것 입니다. 아니면, 간단히 boolean after(Object when)와 boolean before(Object when)를 사용해도 좋습니다.





출처 : 자바의 정석








댓글
댓글쓰기 폼