java.util패키지를 보면 날짜, 시간에 관련된 데이터를 관리하는 클래스인 Calendar클래스가 있습니다.

모니터 왼쪽 하단에 보면 컴퓨터 시계가 보입니다.

이 시계를 이용해서 Calendar클래스는 날짜 및 시간을 계산합니다.

이 시계가 제대로 동작하지 않는다면 다른 프로그램들이 잘못된 시간계산을 하게 될 수도 있습니다.

혹시 제대로 동작하지 않는다면 메인보드의 수은전지를 갈아끼워 주시면 됩니다.


현재의 날짜와 시간을 알아보기!!

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
import java.util.Calendar;
 
public class TodayMain {
    public static void main(String[] args) {
        Calendar day = Calendar.getInstance();
        int year = day.get(Calendar.YEAR);    // 현재의 년도
        int month = day.get(Calendar.MONTH) + 1;    // 월
        int date = day.get(Calendar.DATE);    // 일
        String am_pm = am_pm_String(day.get(Calendar.AM_PM));    // 오전/오후
         
        System.out.println("오늘은 : " + year + "년 " + month + "월 " + date + "일");
        System.out.println("현재시각은 " + am_pm + day.get(Calendar.HOUR_OF_DAY) +
                "시 " + day.get(Calendar.MINUTE) + "분 " + day.get(Calendar.SECOND) + "초 입니다."); 
 
    }
 
     public static String am_pm_String(int am_pm) {
         if(am_pm == 0){
            return "오전";
        }else if(am_pm == 1){
            return "오후";
        }
        return "";
    }
}
cs




Calendar클래스는 추상클래스입니다. ( 추상클래스는 직접객체를 생성할 수 없습니다  ::추상클래스와 추상메소드)

그래서 getInstance()를 통해 현재의 시간정보 및 지역정보가 적용되어 만들어진 객체를 가져옵니다.

따라서 5번라인처럼 사용하면 됩니다.

혹은 Calendar클래스를 상속받은 GregorianCalendar클래스를 이용해도 됩니다.

6번라인부터 9번라인을 보면 get()을 사용했습니다

이때 get()의 매개변수로 int값이 들어가는데 보시다시피 아무런int값이 아닌 Calendar클래스에서 제공하는 static상수를 이용합니다. API를 보면 알겠지만 대부분이 int자료형이고 boolean형과 long형도 있습니다.


주의할점!!!

Calendar클래스에서 Calendar.MONTH로 얻어오는 "월"은 값의 범위가 0~11 입니다

따라서 +1을 해주어야 우리가 사용하는 "월"과 같아집니다.


현재의 시간/날짜를 얻기만 할 수 있는것은 아닙니다.

직접 세팅도 할 수 있습니다.

바로 set()을 이용해서 말이죠.

위의 소스에서 getInstance()를 통해 현재시간/날짜정보를 가져온후 set()을 사용하시면 됩니다.

Calendar클래스의 API를 보면 set메소드가 여러개 있는데요 그 중 set(int yar, int month, int date)를 이용해서 달력을 만들어보도록 하겠습니다.


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
34
35
36
37
38
39
40
41
import java.util.Calendar;
import java.util.Scanner;
 
public class MakeCalendar {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        int year;
        int month;
        int day;
        int lastDay;
        Calendar calendar = Calendar.getInstance();
        
        System.out.println("년도를 입력하세요 : ");
        year = Integer.parseInt(scanner.nextLine());
        System.out.println("원하는 달을 입력하세요 : ");
        month = Integer.parseInt(scanner.nextLine());
        
        //입력받은 년, 월, 일로 셋팅 (첫일은 1일)
        calendar.set(year, month-11);
        //입력받은 달의 1일의 요일
        day = calendar.get(Calendar.DAY_OF_WEEK);
        //입력받은 달의 마지막 일
        lastDay = calendar.getActualMaximum(Calendar.DATE);
        System.out.println("일\t월\t화\t수\t목\t금\t토");
        System.out.println("---------------------------------------------------");
        //1일 전의 공백 채우기
        for(int i = 1; i<day; i++){
            System.out.print("\t");
        }
        for(int i = 1; i<=lastDay; i++){
            System.out.print(i+"\t");
            //요일이 일요일(1)이면 줄바꾸기
            day++;
            if(day%7 ==1){
                System.out.println("");
            }
        }
    }
}
 
cs


6번라인을 모르시는 분은 Scanner라는 클래스로 입력을 받는구나 라고만 생각해주세요.

년도와 월을 입력받아 달력을 출력하는 소스코드입니다(윤달은 생각하지 않았습니다^^;;)

20번라인에서 입력받은 년도와 월로 셋팅을 합니다 month에 -1을 한 이유는 위에서 주의사항에서 보듯이 0부터 11까지의 범위를 가지고 있기 때문입니다. 우리가 7월의 달력을 보고싶으면 6을 입력해주는것이죠.

그리고 1일의 요일과 마지막일을 얻어와서 출력을 해준겁니다.

요일은 1~7까지의 범위를 가지구요, 1이 일요일 ~ 7이 토요일 입니다.

2015년의 7월 1일은 수요일입니다. 그래서 정수 4를 반환해 줄겁니다.

첫번째 for문은 1일전에 공백이 있는 요일이 있을 수 있습니다.

그 부분을 공백으로 채워줍니다.  나름 이쁘라고.. 탭으로 간격을 두었습니다^^;

두번째 for문에서는 마지막일까지 달력에 숫자를 채워주는겁니다.

그리고 동시에 요일도 하나씩 증가시키면서 1이되면 즉, 일요일이면 한 줄 내려주는것 입니다.

그러면 달력 완성~!!