格式如下:
------------2024年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
------------2024年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 29
...
------------2024年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
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个合法的年份:");
int year = sc.nextInt();
//1、先判断该年的第一天是星期几
int dayOfWeek = 5; //以 2021-01-01 为星期五作为参照
if(year < 2021) {
for(int i = 2020;i >= year;i--) {
if(i % 400 == 0 || (i % 100 != 0 && i % 4 == 0)) {
dayOfWeek = (dayOfWeek + 7 - 366 % 7) % 7;
} else {
dayOfWeek = (dayOfWeek + 7 - 365 % 7) % 7;
}
}
}
if(year > 2021) {
for(int i = 2021;i < year;i++) {
if(i % 400 == 0 || (i % 100 != 0 && i % 4 == 0)) {
dayOfWeek = (dayOfWeek + 366 % 7) % 7;
} else {
dayOfWeek = (dayOfWeek + 365 % 7) % 7;
}
}
}
//轮流输出12 个月
for(int i = 1;i <= 12;i++) {
System.out.println("---------" + year + "年" + i + "月---------");
System.out.println("一 二 三 四 五 六 日");
for(int j = 0;j < dayOfWeek - 1;j++) {
System.out.print("\t");
}
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
for(int j = 1;j <= 31;j++) { //j 表示几号
if(dayOfWeek == 7) {
System.out.print(j + "\t");
System.out.println();
} else {
System.out.print(j + "\t");
}
//没输出一天使得下一天对应的 dayOfWeek + 1
dayOfWeek++;
dayOfWeek = dayOfWeek % 7 == 0 ? 7 : dayOfWeek % 7;
}
break;
case 2:
if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {
for(int j = 1;j <= 29;j++) { //j 表示几号
if(dayOfWeek == 7) {
System.out.print(j + "\t");
System.out.println();
} else {
System.out.print(j + "\t");
}
//没输出一天使得下一天对应的 dayOfWeek + 1
dayOfWeek++;
dayOfWeek = dayOfWeek % 7 == 0 ? 7 : dayOfWeek % 7;
}
} else {
for(int j = 1;j <= 28;j++) { //j 表示几号
if(dayOfWeek == 7) {
System.out.print(j + "\t");
System.out.println();
} else {
System.out.print(j + "\t");
}
//没输出一天使得下一天对应的 dayOfWeek + 1
dayOfWeek++;
dayOfWeek = dayOfWeek % 7 == 0 ? 7 : dayOfWeek % 7;
}
}
break;
case 4:
case 6:
case 9:
case 11:
for(int j = 1;j <= 30;j++) { //j 表示几号
if(dayOfWeek == 7) {
System.out.print(j + "\t");
System.out.println();
} else {
System.out.print(j + "\t");
}
//没输出一天使得下一天对应的 dayOfWeek + 1
dayOfWeek++;
dayOfWeek = dayOfWeek % 7 == 0 ? 7 : dayOfWeek % 7;
}
break;
default:
break;
}
System.out.println("\r\n");
}
}
}
效果展示: