import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.TemporalAdjusters;
import java.util.HashSet;
import java.util.Set;
import java.util.Scanner;
public class ChineseCalendar {
private static final Set<LocalDate> HOLIDAYS = new HashSet<>();
static {
HOLIDAYS.add(LocalDate.of(2023, Month.JANUARY, 1));
HOLIDAYS.add(LocalDate.of(2023, Month.JANUARY, 21));
HOLIDAYS.add(LocalDate.of(2023, Month.JANUARY, 22));
HOLIDAYS.add(LocalDate.of(2023, Month.JANUARY, 23));
HOLIDAYS.add(LocalDate.of(2023, Month.JANUARY, 24));
HOLIDAYS.add(LocalDate.of(2023, Month.JANUARY, 25));
HOLIDAYS.add(LocalDate.of(2023, Month.JANUARY, 26));
HOLIDAYS.add(LocalDate.of(2023, Month.JANUARY, 27));
HOLIDAYS.add(LocalDate.of(2023, Month.APRIL, 5));
HOLIDAYS.add(LocalDate.of(2023, Month.MAY, 1));
HOLIDAYS.add(LocalDate.of(2023, Month.MAY, 2));
HOLIDAYS.add(LocalDate.of(2023, Month.MAY, 3));
HOLIDAYS.add(LocalDate.of(2023, Month.JUNE, 22));
HOLIDAYS.add(LocalDate.of(2023, Month.SEPTEMBER, 29));
HOLIDAYS.add(LocalDate.of(2023, Month.SEPTEMBER, 30));
HOLIDAYS.add(LocalDate.of(2023, Month.OCTOBER, 1));
HOLIDAYS.add(LocalDate.of(2023, Month.OCTOBER, 2));
HOLIDAYS.add(LocalDate.of(2023, Month.OCTOBER, 3));
HOLIDAYS.add(LocalDate.of(2023, Month.OCTOBER, 4));
HOLIDAYS.add(LocalDate.of(2023, Month.OCTOBER, 5));
HOLIDAYS.add(LocalDate.of(2023, Month.OCTOBER, 6));
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份(1-12):");
int month = scanner.nextInt();
scanner.close();
printCalendar(year, month);
}
private static void printCalendar(int year, int month) {
LocalDate date = LocalDate.of(year, month, 1);
Month currentMonth = date.getMonth();
int daysInMonth = currentMonth.length(date.isLeapYear());
System.out.println("\t\t" + year + "年" + month + "月");
System.out.println("日\t一\t二\t三\t四\t五\t六");
DayOfWeek firstDay = date.getDayOfWeek();
int startIndex = firstDay.getValue() == 7 ? 0 : firstDay.getValue();
for (int i = 0; i < startIndex; i++) {
System.out.print("\t");
}
for (int day = 1; day <= daysInMonth; day++) {
LocalDate currentDate = LocalDate.of(year, month, day);
String dayStr = day + "";
if (HOLIDAYS.contains(currentDate)) {
dayStr = "\u001B[31m" + dayStr + "\u001B[0m";
} else if (firstDay == DayOfWeek.SATURDAY || firstDay == DayOfWeek.SUNDAY) {
dayStr = "\u001B[34m" + dayStr + "\u001B[0m";
}
System.out.print(dayStr + "\t");
if (firstDay == DayOfWeek.SATURDAY || day == daysInMonth) {
System.out.println();
if (day != daysInMonth) {
firstDay = DayOfWeek.SUNDAY;
}
} else {
firstDay = firstDay.plus(1);
}
}
}
}