본문 바로가기

JAVA/날짜/시간

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

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


자바에서는 날짜와 시간에 관련된 데이터를 쉽게 처리할 수 있도록 Calendar나 Date를 제공하는데, JSK1.0 부터 Date가 사용되었으나 JDK1.1 부터 보다 향상된 기능의 Calendar가 추가되었습니다. 이전 버전으로 작성된 코드와의 호환을 위해서 남겨두고 있지만, 가능하면 Date보다는 Calendar를 사용하는게 좋습니다.


그래도 간단한 날짜에는 Date 를 사용하는 것이 더 나을 수 있으며, 반드시 Date를 사용해야하는 경우도 있기때문에, Calendar와 Date간의 변환방법을 꼭 알아두어야 합니다.


 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);



Calendar 기본 예제 입니다.


CalendarEx1.java

package arabiannight.tistory.com.calendardate;

import java.util.*;

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));
 	    // (today.get(Calendar.MONTH) + 1)) 이런 형식으로 하면 다음월을 받아 올 수 
 	    // 있다. today.get(Calendar.MONTH) + 1로 하면 이상한 값이 나온다. (괄호유무)
 	    System.out.println("월(0~11, 0:1월): " + (today.get(Calendar.MONTH) + 1));
		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));
		// 1:일요일, 2:월요일, ... 7:토요일
		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초)
		System.out.println("TimeZone(-12~+12): " + 
		(today.get(Calendar.ZONE_OFFSET)/(60*60*1000))); 
		// 이 달의 마지막 일을 찾는다.
		System.out.println("이 달의 마지막 날: " + today.getActualMaximum(Calendar.DATE) ); 
	}
}


Result

이 해의 년도 : 2012
월(0~11, 0:1월): 4
이 해의 몇 째 주: 20
이 달의 몇 째 주: 3
이 달의 몇 일: 14
이 달의 몇 일: 14
이 해의 몇 일: 135
요일(1~7, 1:일요일): 2
이 달의 몇 째 요일: 2
오전_오후(0:오전, 1:오후): 1
시간(0~11): 10
시간(0~23): 22
분(0~59): 35
초(0~59): 57
1000분의 1초(0~999): 846
TimeZone(-12~+12): 9
이 달의 마지막 날: 31




Calendar  = getInstance()를 통해서 얻은 인스턴스는 기본적으로 현재 시스템의 날짜와 시간에 대한 정보를 담고 있습니다. 원하는 날짜나 시간으로 설정하려면 set메서드를 사용하면 됩니다. 여기서는 int get(int field)를 이용해서 원하는 필드의 값을 얻어오는 방법을 보여주기 위한 것입니다.


 public final static int YEAR = 1;


get메서드의 매개변수로 사용되는 int값들은 Calendar에 정의된 static상수이다. 이 예제에서는 자주 쓰이는 것들만 골라놓은 것인데 실제로는 더 많은 필드들이 정의되어 있으니 보다 자세한 내용은 API문서를 참고하자.


한가지 주의해야할 것은 get(Calendar.MONTH)로 얻어오는 값의 범위가 1~12가 아닌, 0~11 이라는 것이다. 그래서 get(Calendar.MONTH)로 얻오오는 값이 0이면 1월을 의미하고 11이면 12월을 의미한다.







출처 : 자바의 정석