一个可以查询1900年之后的所有年份当月月历。
import java.util.Scanner;
public class Test {// 输入年月输出当月日历
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入年份");
int year = input.nextInt();
System.out.println("请输入月份:");
int month = input.nextInt();
int count = 0;// 这些年之间闰年的个数
for (int i = 1900; i < year; i++) {// 闰年个数必须用循环做,因为规则不单单4年一闰,所以不能用除法
if (((i % 4 == 0) && (i % 100 != 0) || i % 400 == 0)) {
count++;
}
}
int days = (year - 1900) * 365 + count;
switch (month) {
case 12:
days += 30;
case 11:
days += 31;
case 10:
days += 30;
case 9:
days += 31;
case 8:
days += 31;
case 7:
days += 30;
case 6:
days += 31;
case 5:
days += 30;
case 4:
days += 31;
case 3:
days += 28;
case 2:
days += 31;
case 1:
days += 0;
default:
break;
}
if (((year % 400 == 0) || (year % 4 == 0 & year % 100 != 0))
& month > 2) {// 如果查询的是闰年且大于2月,则要补上一天
days++;
}
int dayinweek = days % 7;// 计算每月1号是星期几
System.out.println(year + "年" + month + "月:");
System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");
int day = 0; // 存储要打印的天数
if (month == 2) {
if ((year % 400 == 0) || (year % 4 == 0 & year % 100 != 0)) {// 如果查询的是闰年的2月,则要打印29天
day = 29;
} else {
day = 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
day = 30;
} else {
day = 31;
}
// 以下是根据dayinweek(即当月1号在星期里的位置参数即月头起始空格数)和该月天数来做个打印输出
int print_count = 1;// 给月头的空格与当月天数的和做个计数,实现7个数据就换行输出
for (int i = 1; i <= day + dayinweek; i++) {
while (dayinweek > 0) {
System.out.print(" \t");
dayinweek--;
print_count++;
}
System.out.print(i + "\t");
if (print_count % 7 == 0) {
System.out.println();// 输出时每隔七天换行
}
print_count++;
}
}
}