本文实例讲述了JAVA实现的简单万年历。
实现思路具体如下:
已知1900年1月1日星期一判断是否闰年
指定年月返回当月的天数
返回一年的总天数
返回距离1900年1月到指定年月的上一个月的总天数
实现代码如下:package 日历;
import java.util.Scanner;
/**
* @author 36D小可爱
*
*/
public class 日历 {
/**
* 判断是否闰年
*
* @param year 年
* @return true || false
*/
public static boolean isR(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
/**
* 指定年月返回当月的天数
*
* @param year 年
* @param month 月
* @return 天数
*/
public static int getDayMonth(int year, int month) {
switch (month) {
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (isR(year)) {
return 29;
} else {
return 28;
}
default:
return 31;
}
}
/**
* 判斷一年的总天数
*
* @param year 年分
* @return 总天数
*/
public static int getYearDay(int year) {
if (isR(year)) {
return 366;
} else {
return 365;
}
}
/**
* 距离1900年1月到指定年月的上一个月的总天数
*
* @param year 年份
* @param month 月份
* @return 总天数
*/
public static int getTotleDay(int year, int month) {
// 1900,1
// 2020,3//假如到2020年3月
// 1900-2019 + 3个月
int d = 0;
for (int i = 1900; i < year; i++) {
d += getYearDay(i);
}
for (int j = 1; j < month; j++) {
d += getDayMonth(year, j);
}
return d;
}
/**
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份");
int days = sc.nextInt();// 获取年份
System.out.println("请输入月份");
int month = sc.nextInt();// 获取月份
int getTotleDay = getTotleDay(days, month);
System.out.println(getTotleDay);// 1900到指定年份的上个月总天数
System.out.println("星期一\t" + "星期二\t" + "星期三\t" + "星期四\t" + "星期五\t" + "星期六\t" + "星期日\t");
int week = getTotleDay(days, month) % 7 + 1;// 获取本月第一天是周几(原理上个月的最后一天+1等于下个月的第一天)
if (week == 1) {// 判断要输出的空格(原理假如是周三则需要输出2个空格,周一则不需要输出空格)
week = 0;
}
for (int i = 1; i < week; i++) {
System.out.print(" \t");// 空格循环输出
}
int day = getDayMonth(days, month);// 获取本月天数
for (int j = 1; j <= day; j++) {
System.out.print(j + "\t");// 输出天数
if ((getTotleDay + j) % 7 == 0) {// 7天换行
System.out.println();
}
}
}
}