import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
//输入当前要查询的日期
System.out.println("请输入当前的年月日:格式如:1991 2 6");
Scanner sc=new Scanner(System.in);
int year=sc.nextInt();
int month=sc.nextInt();
int day=sc.nextInt();
System.out.println("您输入的日期是:"+year+"-"+month+"-"+day);
//设置一个数组用于存放每个月份的天数,其中2月份默认为29天
int days[]={31,29,31,30,31,30,31,31,30,31,30,31};
//要算出月份是从星期几开始,需要求出从1900-1-1到现在的这个月开始时的总天数+1
//计算从1900年到输入年份的上一个年份的最后一天的天数
int sumDays=0;
for(int i=1900;i<year;i++){
//判断是否是闰年,分别加上365和366
if(isLeapYear(i)){
sumDays+=366;
}else{
sumDays+=365;
}
}
//计算从今年已经到这个月一号前的天数
for(int i=0;i<month-1;i++){
sumDays+=days[i];
}
//不为闰年时,需要减去一
if(month>2&&!isLeapYear(year)){
sumDays--;
}
//这一步为什么要一?到晚上查下万年历,查下1900-1-1 是星期几 1900-2-1 又是星期几 就知道了
sumDays++;
//System.out.println(sumDays);
//计算这个月是从星期几开始的是用总天数%7得到的数字,0-6分别对应周日到周一
int weekDay=sumDays%7;
//输出万年历的表格
System.out.println("星期日\t"+"星期一\t"+"星期二\t"+"星期三\t"+"星期四\t"+"星期五\t"+"星期六\t");
//weekDay是多少就输出多少个制表格
for(int i=0;i<weekDay;i++){
System.out.print("\t");
}
//制表格输出结束后就开始出书当月的天数
for(int i=1;i<=days[month-1];i++){
if(i!=day){
System.out.print(i+"\t");
}else{
System.out.print(i+"*\t");//比较出当前的日期
}
//每七个就换行
if((weekDay+i)%7==0){
System.out.println();
}
}
}
//判断传进来的年是不是闰年(leapyear)
static boolean isLeapYear(int year){
if((year%4==0&&year%100!=0)||year%400==0){
return true;
}else{
return false;
}
}
}
/*
* 本人基础有限啊!最近在好好地补习。现在闲谈下,这个所谓万年历的编程过程是怎么样的。
* 其实这个中间需要知道的几点就是:
* 1、1900-1-1 是从星期一开始的!
* 2、如何判断那个月是从星期几开始
* 要想判断当月是从星期几开始的,必须先求出1900到这个月份的天数+1,比如从1900-1-1是星期一,那么总天数为0+1=1;1%7=1;所以是从星期一开始的。
* 求总天数+1;是求从1900到这一年开始的天数,再加上到这个月开始的天数+1;
* */