java写日历
以下是一个简单的Java程序,用于打印指定月份的日历:
import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份:");
int month = scanner.nextInt();
printCalendar(year, month);
}
public static void printCalendar(int year, int month) {
int[][] calendar = new int[6][7];
int daysInMonth = getDaysInMonth(year, month);
int startDayOfWeek = getStartDayOfWeek(year, month);
int dayValue = 1;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
if (i == 0 && j < startDayOfWeek) {
calendar[i][j] = 0;
} else if (dayValue <= daysInMonth) {
calendar[i][j] = dayValue;
dayValue++;
} else {
calendar[i][j] = 0;
}
}
}
System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
if (calendar[i][j] == 0) {
System.out.print(" ");
} else {
System.out.printf("%7d", calendar[i][j]);
}
}
System.out.println();
}
}
public static int getDaysInMonth(int year, int month) {
int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeapYear(year) && month == 2) {
return 29;
}
return daysInMonth[month - 1];
}
public static boolean isLeapYear(int year) {
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
public static int getStartDayOfWeek(int year, int month) {
int day = 1;
int monthValue = month < 3 ? month + 12 : month;
int yearValue = month < 3 ? year - 1 : year;
int century = yearValue / 100;
int yearOfCentury = yearValue % 100;
int dayOfWeek = (day + 2 * monthValue + 3 * (monthValue + 1) / 5 + yearOfCentury + yearOfCentury / 4 - yearOfCentury / 100 + yearOfCentury / 400 + century * 5) % 7;
return (dayOfWeek + 6) % 7;
}
}
您可以运行此程序并输入年份和月份来打印指定月份的日历。程序使用了一个二维数组来表示日历,其中第一维表示周数(最多为6周),第二维表示星期几(0表示星期日,1表示星期一,以此类推)。
程序中的getDaysInMonth函数用于获取指定月份的天数,考虑了闰年的情况。isLeapYear函数判断给定年份是否是闰年。getStartDayOfWeek函数用于获取指定年份和月份的第一天是星期几。
希望对您有所帮助
原文地址: https://www.cveoy.top/t/topic/ihP2 著作权归作者所有。请勿转载和采集!