录入年月日打印这个月的日历和当前日期
import java.util.Scanner;
public class Test {
private static final int START_WEEK = 4;
private static int START_YEAR = 1970;
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();
System.out.println("请输入日期");
int date = input.nextInt();
int total_days = 0;
for (int i = START_YEAR; i < year ; i++) {
total_days += year_of_days(i);
}
total_days += year_of_days(year, month, 1);
int day = (total_days + (START_WEEK - 1)) % 7;
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 0; i < day ; i++) {
System.out.print(" \t");
}
int monthDays = monthDays(year, month);
int count = day;
for (int i = 1; i <= monthDays ; i++) {
if (i == date)
System.out.print(i + "*\t");
else
System.out.print(i + "\t");
count++;
if (count % 7 == 0) {
System.out.println();
}
}
}
private static void test(){
int total_days = 0;
for (int i = START_YEAR; i < 2021 ; i++) {
total_days += year_of_days(i);
}
total_days = total_days + year_of_days(2021, 4, 1);
int day = (total_days + (START_WEEK - 1)) % 7;
System.out.println(week(day));
}
private static int year_of_days(int year) {
return isLeapYear(year) ? 366 : 365;
}
private static int year_of_days(int year, int month, int date) {
int total_days = date;
for (int i = 1; i < month; i++) {
total_days += monthDays(year, i);
}
return total_days;
}
private static int monthDays(int year,int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return isLeapYear(year) ? 29 : 28;
}
return 0;
}
private static boolean isLeapYear(int year) {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ;
}
private static String week(int day) {
String str = "";
switch (day) {
case 0:
str = "星期天";
break;
case 1:
str = "星期一";
break;
case 2:
str = "星期二";
break;
case 3:
str = "星期三";
break;
case 4:
str = "星期四";
break;
case 5:
str = "星期五";
break;
case 6:
str = "星期六";
break;
}
return str;
}
}