实现简单的日历功能 - Java编程案例
本文将介绍如何使用Java编程语言实现一个简单的日历功能。通过接受用户输入的年份和月份,我们将计算该月份的天数,并输出一个日历表格,显示每个日期对应的星期几。这个日历功能可以帮助用户快速查看指定月份的日期分布,具有实用性和易用性。
以下是相关代码:
package cjh.qiku;
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();
// 计算该月份的天数
int daysInMonth = getDaysInMonth(year, month);
// 输出日历标题
System.out.println("日 一 二 三 四 五 六");
// 计算该月份的第一天是星期几
int startDayOfWeek = getStartDayOfWeek(year, month);
// 输出日历内容
int day = 1;
for (int i = 0; i < startDayOfWeek; i++) {
System.out.print(" "); // 输出空格表示前面的空白日期
}
for (int i = startDayOfWeek; i < 7; i++) {
System.out.printf("%2d ", day); // 输出日期
day++;
}
System.out.println();
while (day <= daysInMonth) {
for (int i = 0; i < 7 && day <= daysInMonth; i++) {
System.out.printf("%2d ", day); // 输出日期
day++;
}
System.out.println();
}
}
// 计算指定年份和月份的天数
private static int getDaysInMonth(int year, int month) {
if (month == 2) {
if (isLeapYear(year)) {
return 29; // 闰年二月有29天
} else {
return 28; // 非闰年二月有28天
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30; // 四月、六月、九月、十一月有30天
} else {
return 31; // 其他月份都有31天
}
}
// 判断指定年份是否为闰年
private static boolean isLeapYear(int year) {
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
// 计算指定年份和月份的第一天是星期几(0-6,0表示星期日)
private static int getStartDayOfWeek(int year, int month) {
int h = year / 100;
year = year % 100;
int q = 1;
int m = month;
if (m < 3) {
m += 12;
year -= 1;
}
int j = year / 100;
year = year % 100;
int k = year;
int h0 = (q + 26 * (m + 1) / 10 + k + k / 4 + j / 4 + 5 * j) % 7;
return (h0 + 5) % 7;
}
}
总结:通过以上的代码,我们实现了一个简单的日历功能。用户可以输入年份和月份,程序会计算该月份的天数,并按照每周七天的格式输出一个日历表格。在日历表格中,我们使用空格来表示前面的空白日期,然后按照日期逐行输出,直到该月的最后一天。为了实现这个功能,我们编写了几个辅助方法,包括计算指定年份和月份的天数、判断指定年份是否为闰年以及计算指定年份和月份的第一天是星期几。通过这些方法的组合和循环,我们得到了一个简单而实用的日历功能。