[Java] Calendar API를 이용하여 가장 쉽게 달력 만들기
- Language/Java
- 2018. 5. 31.
배열 이용하지 않고 달력 출력
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 |
배열을 이용하여 달력을 출력 하였더니 주 점프도 간단해졌고, 요일에 맞춰서 출력하기도 너무 쉬웠다.
'Language > Java' 카테고리의 다른 글
[Java & Network] 논블럭(Non Block I/O)개요와 자바 NIO 패키지 (0) | 2018.06.06 |
---|---|
[Java] Date, SimpleDateFormat, Calendar API 클래스 활용예제 (0) | 2018.06.01 |
[Java] 추상화(Abstract)와 애플리케이션 컨텍스트(Application Context) 또는 경계 (0) | 2018.05.31 |
[Java] 객체지향을 이해하고 특성알기 (0) | 2018.05.31 |
[Java] 인터페이스 구조파악하고 구현해보기 (0) | 2018.05.31 |