1.输入年份和月份,在控制台打印出本年本月的日历
效果图如下:
2.我感觉最关键的地方有两点:
第一:设立一个容易计算的时间节点
第二:判断哪年哪月的第一天是周几
如果这两个都做好了的话,接下来就很容易了,具体代码如下:
package com.lgl.day02;
import java.util.Scanner;
/**
* 万年历
* @author 李广亮
*/
public class CalendarTest {
/**
* 判断是否为闰年
* 条件一:年份能被4整除,但不能被100整除
* 条件二:能被400整除
*/
public static boolean isLeapYear(int year) {
if((year%4 == 0 && year%100 != 0) || (year%400 == 0)) {
return true;
} else {
return false;
}
}
/**
* 计算哪年哪月有多少天
*/
public static int daysOfMonthOfYear(int year, int month) {
int day = 0;
switch (month) {
case 1: //大月31天
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4: //小月30天
case 6:
case 9:
case 11:
day = 30;
break;
case 2: //若是二月的话,判断一下是否为闰年
if(isLeapYear(year)) {
day = 29;
} else {
day = 28;
}
break;
default:
break;
}
return day;
}
/**
* 判断哪年哪月的第一天
*/
public static int whatDayOfMonth(int year, int month) {
int firstDay = 0;
int days = 0;
//设置1951-01-01 (星期一)为时间基点
//最好以1582年3月1日以后的日期为基点,因为这天是格里高利日立正式颁发的日子
//1951年1月1号距离本年1月1号的天数
for(int i=1951; i<year; i++) {
if(isLeapYear(i)) {
days = days + 366;
} else {
days = days + 365;
}
}
//本年1月1号距离上月月末的天数
for(int j=1; j<month; j++) {
days = days + daysOfMonthOfYear(year, j);
}
//System.out.println(days);
firstDay = days % 7;
//System.out.println(firstDay);
return firstDay;
}
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();
System.out.println("请输入月份:");
int month = sc.nextInt();
sc.close();
System.out.println("******万**年**历******");
System.out.println("******" + year + "年" + month + "月" + "******");
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
int times = 0;
for(int i=0; i<=whatDayOfMonth(year, month); i++) {
System.out.print("\t");
times++;
}
for(int j=1; j<=daysOfMonthOfYear(year, month); j++) {
System.out.print(j + "\t");
times++;
if(times % 7 == 0) {
System.out.println();
}
}
}
}