用java编写一个万年历
时间: 2023-06-23 19:10:17 浏览: 156
好的,我可以提供一个简单的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();
int days = getDaysOfMonth(year, month);
int firstDayOfWeek = getFirstDayOfWeek(year, month);
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1; i <= days + firstDayOfWeek - 1; i++) {
if (i < firstDayOfWeek) {
System.out.print("\t");
} else {
System.out.print(i - firstDayOfWeek + 1 + "\t");
}
if (i % 7 == 0) {
System.out.println();
}
}
}
/**
* 获取指定年份月份的天数
*/
private static int getDaysOfMonth(int year, int month) {
int days;
switch (month) {
case 2:
days = isLeapYear(year) ? 29 : 28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = 31;
break;
}
return days;
}
/**
* 判断指定年份是否是闰年
*/
private static boolean isLeapYear(int year) {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
/**
* 获取指定年份月份的第一天是星期几,星期天为0
*/
private static int getFirstDayOfWeek(int year, int month) {
int dayOfWeek = 1; // 1900年1月1日是星期一
for (int i = 1900; i < year; i++) {
if (isLeapYear(i)) {
dayOfWeek += 366;
} else {
dayOfWeek += 365;
}
}
for (int i = 1; i < month; i++) {
dayOfWeek += getDaysOfMonth(year, i);
}
return dayOfWeek % 7;
}
}
```
运行该程序后,用户可以输入要查询的年份和月份,程序会输出该月份的日历。例如,输入2022年4月,输出如下:
```
请输入你要查询的年份:2022
请输入你要查询的月份:4
日 一 二 三 四 五 六
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
```
该程序通过计算出指定年份月份的第一天是星期几,再根据每个月的天数来输出日历。
阅读全文