package cfy.Demos;
import java.util.Scanner;
//万年历
public class Demo1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("请输入年:");
Scanner input = new Scanner(System.in);
int year = input.nextInt();
System.out.println("请输入月:");
int month = input.nextInt();
//6
int totalYear = getFormYearTo1900TotalDays(year);
int totalMonth = getNowYearToDays(year,month);
//7 求星期 公式是 %7 --> 0~6之间的数字
//0代表是星期日 以此类推
int week = (totalMonth+totalYear+1)%7;
//封装一个方法 这个方法进行格式输出
FormatCalender(year,month,week);
}
/**
* 格式化日历
* @param year 输入的年份
* @param month 输入的月份
* @param week 输入的星期
*/
public static void FormatCalender(int year,int month,int week)
{
//发现打印规律是逢7换行
int cut = 0; //统计计数
System.out.println("星期日\t\t星期一\t\t星期二\t\t星期三\t\t星期四\t\t星期五\t\t星期六");
//0-6之间//打印星期
for (int i = 1;i <= 6;i++)
{
System.out.print("\t\t"); //此处别用println,不然换行
//统计计数
cut++;
}
//打印日历天数
for (int i = 1;i <=getNowMonthDays(year,month);i++)
{
//打印值
System.out.print(i+"\t\t");
cut ++;
if(cut%7==0)
{
System.out.println();
}
}
}
//静态方法
/**
* 判断闰年
* @param year 年份
* @return true 是闰年 false 不是闰年
*/
public static boolean isLeapYear(int year) {
if ((year%4==0 && year%100!=0) || (year%400==0))
{
return true;
}else
{
return false;
}
}
/**
* 通过月份获取对应的天数
* @param year 对应的年份
* @param month 对应的月份
* @return 月份对应的天数
*/
public static int getNowMonthDays(int year,int month)
{
switch(month)
{
case 2:
return isLeapYear(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
/**
*
* @param year
* @return
*/
public static int getFormYearTo1900TotalDays(int year)
{
//定义一个变量用来计算总天数
int sum = 0;
for (int i= 1900;i
{
//isLeapYear(year); //计算的始终是同一个年份//因为和当前这个函数的参数同名了
sum += isLeapYear(i) ? 366 : 365;
}
return sum;
}
/**
* 当前月份距离1月1日的总天数
* @param year 当前年份
* @param month 当前月份
* @return
*/
public static int getNowYearToDays(int year,int month)
{
//定义一个变量用来计算总天数
int sum = 0;
for (int i = 1;i < month;i++)
{
sum += getNowMonthDays(year,i);
}
return sum;
}
}