package chapter01;
import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
// 从键盘接收int类型的年份
int year = input.nextInt();
System.out.println("请输入月份:");
// 从键盘接收int类型的月份
int month = input.nextInt();
System.out.println("year:" + year + "\nmonth:" + month);
int totalYear= 0, totalMonth = 0, totalDay = 0;
// 以19000101是礼拜一为基准进行下一步的运算
for(int i = 1900; i < year; i++) {
// 四年一闰, 百年不闰, 四百年再闰
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
totalYear += 366;
}else {
totalYear += 365;
}
}
int days = 0;
// 计算totalMonth
for(int i = 1; i <= month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days = 29;
}else {
days = 28;
}
break;
default:
break;
}
// 用户输入的月份的天数不计入totalMonth中
if(i < month) {
totalMonth += days;
}
}
// 计算totalDay
totalDay = totalYear + totalMonth;
// System.out.println("totalDay : " + totalDay);
// totalDay根据与7的关系,可以计算出没月1号是礼拜几
int firstDayOfMonth = totalDay % 7 + 1;
// 当firstDayOfMonth为7的时候,让该值为0
firstDayOfMonth = firstDayOfMonth == 7 ? 0:firstDayOfMonth;
System.out.println(firstDayOfMonth);
System.out.println("日\t一\t二\t三\t四\t五\t六\t");
// 打印该月1号之前的所有的空格数
for(int i = 0; i < firstDayOfMonth; i++) {
System.out.print("\t");
}
// 循环打印该月份的所有天数
for(int i = 1; i <= days; i++) {
System.out.print(i + "\t");
// 每遇到礼拜六换行
if((i + totalDay) % 7 == 6) {
System.out.println();
}
}
}
}