public static void main (String[] args) {
printCalendar(2020);
}
/**
- 判断指定的年份是不是闰年
- @param year 被判断的年份
- @return 如果是闰年就返回turn,不是闰年就返回false
/
public static boolean isLeapYear(int year) {
return (year%40&&year%100!=0)||year%4000;
}
/* - 计算出指定月份的天数
- @param month被指定的月份
- @return 返回指定月份的天数
/
public static int monthDays(int month,int year) {
if(month4|month6|month9|month11) {
return 30;
}else if(month==2) {
return isLeapYear(year)?29:28;
}else {
return 31;
}
}
/* - 计算出当前年当前月份前所有的天数
- @param nowMonth 当前月份
- @param nowYear 当前年
- @return 返回当前年当前月份前所有的天数
/
public static int countAllMonthDays(int nowMonth,int nowYear) {
int allMonthDays=0;
for(int i=1;i<nowMonth;i++) {
allMonthDays+=monthDays(i,nowYear);
}
return allMonthDays;
}
/* - 计算从1900年到当前年前一年的所有年份的天数
- @param nowYear 当前年
- @return 返还从1900年到当前年前一年所有年份的总天数
*/
public static int countAllYearDays(int nowYear) {
int allYearDays=0;
for(int i=1900;i<nowYear;i++) {
allYearDays+=isLeapYear(i)?366:365;
}
return allYearDays;
}
public static void printCalendar(int nowYear) {
int allYearDays=countAllYearDays(nowYear);
for(int i=1;i<=12;i++) {
//先打印月份
System.out.println(i+“月”);
//打印星期
System.out.print(“星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期天\t\n”);
//打印日期前面的空格
int remainder=(countAllMonthDays(i,nowYear)+allYearDays)%7;
for(int j=0;j<remainder;j++) {
System.out.print("\t");
}
//打印一年的日历
for(int k=1;k<=monthDays(i,nowYear);k++) {
if((remainder+k)%7==0) {
System.out.println(k+"\t");
}else {
System.out.print(k+"\t");
}
}
System.out.println();
}
}
}