[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