2013. 7. 25. 16:52

Class Calendar

java.lang.Object

java.util.Calendar

 

Class GregorianCalendar

java.lang.Object

java.util.Calendar

java.util.GregorianCalendar

 

 

Calendar클래스는 날짜와 시간을 객체 모델링 화 한 클래스로 년, 월, 일, 요일, 시, 분, 초까지의 시간과 날짜와 관련된 정보를 제공한다. 

Calendar는 추상 클래스로 객체생성은 불가능하며 실제적인 메소드 구현은 서브 클래스인 GregorianCalendar클래스에 정의되어 있다.

 

만약 시스템으로부터 현재 시스템 시간 정보를 얻기 위해서는 getInstance() 라는 정적 메소드를 이용하여 객체를 생성한다. 생성된 Calendar 클래스 객체는 시스템의 현재 날짜와 시간 정보를 가지며, 이 객체가 생성되면 갖고 있는 시간 정보들은 get() 메소드를 이용하여 쉽게 사용 할 수 있다. getInstance() 메소드는 내부적으로 GregorianCalendar 객체를 생성하여 돌려주므로 GregorianCalendar 객체를 직접 생성하여 시간 정보를 구할 수 있다.

 

기타 날짜 관련 클래스로 java.util.Date 가 있으나 국제화 기능과 함께 각종 부가 기능이 추가된

Calendar류의 클래스를 사용할 것을 권장 한다.

 

 

■ 현재시각 가져오기

 

 

1
2
Calendar rightNow = Calendar.getInstance();
// Calendar rightNow = new GregorianCalendar();

 

 

 

혹은

 

 

1
GregorianCalendar rightNow = new GregorianCalendar(); // 직접 그레고리언 캘런더 생성

 

 

 

1
2
3
System.out.println("오늘 날짜는 " + rightNow.get(Calendar.YEAR) + "년 "
        + (rightNow.get(Calendar.MONTH) - Calendar.JANUARY + 1) + "월 "
        + rightNow.get(Calendar.DATE) + "일 ");

 

 

 

■ GregorianCalendar 클래스의 주요 메소드

● public int get(int field)

 

field에 해당하는 날짜를 반환한다. field는 Calendar 클래스에서 정의된 상수이다.

예) get(Calendar.MONTH); //달력의 월(월-1)을 반환한다.

 

 public void set(int field, int value)

field에 해당하는 날짜를 value 값으로 바꾼다.

예) set(Calendar.YEAR, 2000) //달력의 년을 2000년으로 바꾼다.

 

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

 public final void set(int year, int month, int date, int hour, int minute)

 public final void set(int year, int month, int date, int hour, int minute, int second)

 : calendar의 날짜를 바꾼다.

 

 public void add(int field, int amount)

 : field에 해당하는 날짜를 amount 만큼 증가시킨다.

 

 void roll(int field, boolean up)

 void roll(int field, int amount) 

 : 날짜 정보를 변경한다.

※ add() 메소드는 일수나 월수를 더해서 그 값이 한 달이나 일 년의 범위를

넘어서면 월이나 연수를 증가시키지만 roll() 메소드는 날짜에 많은 수를 더해도 월이 바뀌지 않고

그 달의 처음으로 다시 되돌아가 계산한다.

 

 

■ Calendar 클래스의 주요 메소드 및 상수

◆ 메소드

● static Calendar getInstance()

 : 현재 시스템의 시간 정보를 얻는 Calendar 클래스 객체를 생성한다.

 

● getActualMaximum

 : 해당 월의 마지막일 → int endDays = cal.getActualMaximum(Calendar.DATE);

 

◆ 상수

● YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND

년, 월, 일, 시, 분, 초, 1/1000초를 나타낸다.

 

● JANUARY(=0), FEBRUARY(=1), MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER(=11)

 : 1월 ~ 12월을 차례로 나타낸다. 주의할 점은 0부터 시작된다는 것이다. 달력의 정확한 월을 알고자한다면 다음과 같이 해야 한다.

예) get(Calendar.MONTH)+1

 

● SUNDAY(=1), MONDAY(=2), TUESDAY, WEDNESDAY

 ,THURSDAY, FRIDAY, SATURDAY(=7)

 : 각각의 요일을 나타낸다.

 

● DAY_OF_WEEK : 요일을 얻거나 바꾸자할 때 사용한다.

 

● DAY_OF_MONTH : 일자를 나타낸다.(DATE와 동일)

 

● AM_PM : 오전/오후

 

 

■ 예제

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static void main(String[] args) {
    Calendar cc = Calendar.getInstance();
 
    // 2013년 2월 26일 설정
    cc.set(2013, 1, 19); // 월은 0~11이므로
    System.out.println("날짜 : " + print(cc));
 
    int w;
    // 주(week)의 시작날짜 구하기
    Calendar sday = (Calendar) cc.clone();
 
    // cc객체를 복사하여 새로운 객체 생성
    w = cc.get(Calendar.DAY_OF_WEEK) - 1;
    sday.add(Calendar.DAY_OF_MONTH, w * (-1));
    System.out.println("주 시작날짜 : " + print(sday));
 
    // 주(week)의 마지막날짜 구하기
    Calendar eday = (Calendar) cc.clone();
    w = 7 - cc.get(Calendar.DAY_OF_WEEK);
    eday.add(Calendar.DAY_OF_MONTH, w);
 
    System.out.println("주 마지막 날짜 : " + print(eday));
 
}
 
public static String print(Calendar cal) {
    String[] week = { "일", "월", "화", "수", "목", "금", "토" };
 
    String str = String.format("%d %d %d %s요일", cal.get(Calendar.YEAR),
            cal.get(Calendar.MONDAY) + 1, cal.get(Calendar.DATE),
            week[cal.get(Calendar.DAY_OF_WEEK) - 1]);
    return str;
}

 

'java' 카테고리의 다른 글

날짜관련  (0) 2013.07.25
Date, SimpleDateFormat  (0) 2013.07.25
byte[] ↔ String  (0) 2013.07.25
byte  (0) 2013.07.25
AWT 예제  (0) 2013.07.25
Posted by 1+1은?