万年历是通过我们输入年和月就能够得到该月的日历,不使用月历类,仅仅通过逻辑实现.
我们可以先通过查询得出1990年的1月1日是星期一,将这个时间作为基点,通过计算你所要的日历之间的时间差,再通过模7得出该月份1号所对应星期几,具体代码如下:
import java.util.Scanner;
public class PerpetualCalendar {
public static void main(String[] args) {
//通过控制台输入要查询的日历
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份");
int year = scanner.nextInt();
System.out.println("请输入月份");
int moon = scanner.nextInt();
//1990.1.1是星期一,通过这个时间点向后计算时间得出要查询的月份1号对应是星期几
int num = 0;
//统计年份之间的天数
for (int i = 1990; i<year; i++) {
//判断闰年
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0){
num += 366;
}else {
num += 365;
}
}
//统计月份的天数
for (int i = 1; i < moon; i++) {
if (i == 1 || i == 3|| i == 5 || i == 7 || i == 8 || i == 10 || i == 12 ){
num += 31;
}else if (i == 2){
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
num += 29;
}else {
num += 28;
}
}else {
num += 30;
}
}
//计算查询月份有多少天
int days = 0;
if (moon == 1 || moon == 3|| moon == 5 || moon == 7 || moon == 8 || moon == 10 || moon == 12 ){
days = 31;
}else if (moon == 2){
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
days = 29;
}else {
days = 28;
}
}else {
days = 30;
}
//通过计算年份之间的天数差通过取模运算得出星期几,0-6分别表示一到日;
int space = num % 7;
System.out.println("一\t二\t三\t四\t五\t六\t日");
//刚好通过这个数字计算1号前面要空几个空格,先将空格输出出来
for (int i = 0; i < space; i++) {
System.out.print(" "+"\t");
}
//接下来将日期输出
for (int i = 1; i <= days; i++){
System.out.print(i+"\t");
//每7个要换行,换行统计时要加上空格数
if ((i+space) %7 ==0){
System.out.println();
}
}
}
}
最后显示效果如下图