[Java] Calendar API를 이용하여 가장 쉽게 달력 만들기

배열 이용하지 않고 달력 출력

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
//Calendar 객체 생성(추상클래스 이기 때문에 getInstance로 객체를 생성한다.)
Calendar cal = Calendar.getInstance();
         
    // 1~12 월
    for(int month=0; month<12; month++) {
     // 월 설정
     cal.set(Calendar.MONTH, month);
     System.out.println(cal.get(Calendar.MONTH)+1+"월");
              
     // 월의 마지막일을 변수 maxDay에 저장
     int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        cal.set(Calendar.DATE,1);
              
         // 1일부터 마지막 일 까지
         for(int i=1; i<=maxDay; i++) {
              cal.set(Calendar.DATE, i);
                  
              //주 점프를 하기 위해 오늘이 몇번째 주인지 저장
              int wom1 = cal.get(Calendar.WEEK_OF_MONTH);
                  
              //day 출력
               System.out.print(cal.get(Calendar.DATE) + " ");
              //오늘과 내일이 몇번째 주인지 비교하기 위해서 다음날을 set
              cal.set(Calendar.DATE, i + 1);
              int wom2 = cal.get(Calendar.WEEK_OF_MONTH);
     
              //오늘과 내일이 몇번째 주인지 다르면 점프
              if(wom1 != wom2) {
                   System.out.println();
              }
            }
            System.out.println();
         }
     }
 
cs

1월
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

2월
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

....

1월 부터 12월까지 출력은 되지만 쫌 더 달력스럽게 만들기 위해 요일을 맞춰주고 싶었다. 하지만 배열을 이용하지 않고는 해결방법이 떠오르지 않았고 또 주 점프를 하기 위해 다소 번거로움이 있었다.



배열을 이용 하고 달력 출력

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
Calendar cal = Calendar.getInstance();
int day[][][] = new int[12][6][7];  //[월][주][요일]
String week[] = new String[] {
     "일","월","화","수","목","금","토"
};
         
         
     for(int month=0; month<12; month++) {
         cal.set(Calendar.MONTH, month);
         //이번달 마지막일 maxDay에 저장
         int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
              
         for(int i=1; i<=maxDay; i++) {
             cal.set(Calendar.DATE, i);
               //주와 요일은 1부터 시작하기 때문에 0부터 시작하는 배열 인덱스와 맞지 않다 
             //그래서 -1을 해서 배열 인덱스와 맞춰 주었다.
               day[cal.get(Calendar.MONTH)]
                 [cal.get(Calendar.WEEK_OF_MONTH)-1]
                 [cal.get(Calendar.DAY_OF_WEEK)-1= i;
          }
     }
         
     for(int month=0; month<12; month++) {
          int mm = month+1;
          System.out.println("\t\t\t"+ mm + "월");
              
          for(int i=0; i<week.length; i++) {
              System.out.print(week[i]+"\t");
          }
          System.out.println();
              
          for(int i=0; i<6; i++) {
              for(int j=0; j<7; j++) {
                   if(day[month][i][j] != 0)
                        System.out.print(day[month][i][j] + "\t");
                   else
                        System.out.print("\t");
                  }
              System.out.println();
              }
         }
    cs



배열을 이용하여 달력을 출력 하였더니 주 점프도 간단해졌고,  요일에 맞춰서 출력하기도 너무 쉬웠다. 


댓글

Designed by JB FACTORY