[목 표] java로 콘솔창에 달력 그리기
[TODO]
- 년, 월 입력하기
- 입력된 년이 윤년인지 체크
- 입력된 월의 마지막 일 배열만들기
- 입력된 월의 첫번째 요일 구하기
[1] main
static char[] weeks = {'일','월','화','수','목','금','토'};
static int[] lastDay = {31,28,31,30,31,30,31,31,30,31,30,31};
public static void main(String[] args) {
makeCalendar(2020, 2);
}
[2] getMonth(int year, int month)
: 월이 바르게 입력되었는지 체크
private static int getMonth(int year, int month) {
if(month<1 || month>12) {
System.out.println("[log] month를 잘못입력하였습니다. ");
}else {
System.out.println("[log] month : "+month);
}
return month;
}
[3] getFirstDay(int year, int month)
: 입력 월로부터 첫번째 요일 구하기
private static int getFirstDay(int year, int month) {
int firstDay = (year-1)*365 + (year-1)/4 - (year-1)/100 + (year-1)/400;
for(int i=0;i<month-1;i++) {
firstDay += lastDay[i];
}
return firstDay;
}
[4] getLasyDay(int year, int month)
: 입력한 월로부터 해당 월의 마지막일 구하기
private static int[] getLastDay(int year, int month) {
// TODO Auto-generated method stub
//윤년체크 포함
if(year%4 == 0 && year%100 != 0 || year%400 == 0) {
lastDay[1] = 29;
}else {
lastDay[1] = 28;
}
return lastDay;
}
[5] makeCalendar(int year, int month)
: 달력 그리기
private static void makeCalendar(int year, int month) {
// TODO Auto-generated method stub
System.out.println("year, month"+year+", "+month);
int firstDay = getFirstDay(year, month);
lastDay = getLastDay(year, month);
month = getMonth(year, month);
int week = firstDay%7;
>System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","월","화","수","목","금","토","일");
for(int i=0;i<week;i++) {
System.out.print("\t");
}
for(int i=1;i<=lastDay[month-1];i++) {
System.out.printf("%d\t",i);
week++;
if(week%7 == 0)
System.out.println();
}
if(week%7 != 0) {
System.out.println();
}
}
[참고] https://seoneu.tistory.com/14