System.out.println("*************欢迎使用万年历***************");
System.out.print("\n请输入年份:");
Scanner yearInput = new Scanner(System.in);
int year = yearInput.nextInt();
System.out.print("\n请输入月份:");
Scanner monthInput = new Scanner(System.in);
int month = monthInput.nextInt();
// 当前月份的天数
int days = 0;
// 是否是闰年标识(true为闰年,false为平年)
boolean isLeapYear;
// 判断是闰年还是平年
if ((year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0))
{
// 闰年
isLeapYear = true;
}
else
{
// 平年
isLeapYear = false;
}
// 计算从1900年开始到输入年份的总天数
int totalDays = 0;
for (int i = 1900; i < year; i++)
{
if ((i % 4 == 0) && !(i % 100 == 0) || (i % 400 == 0))
{
totalDays = totalDays + 366;// 闰年为366天
}
else
{
totalDays = totalDays + 365;// 平年为365天
}
}
int beforeDays = 0;
// 计算当前年份 从1月到输入月份的天数(计算输入月份之前的天数)
for (int i = 1; i <= month; i++)
{
switch (i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if (isLeapYear)
{
days = 29;
}
else
{
days = 28;
}
break;
default:
days = 30;
break;
}
if (i < month)
{
beforeDays = beforeDays + days;
}
}
// 从1900年1月1号到当前年月的天数
totalDays = totalDays + beforeDays;
// 计算星期几
int firstDayOfMonth;// 存储当月第一天是星期几:星期日为0,星期一到星期六为1~6
int temp = 1 + totalDays % 7; // 从1900年1月开始推算
if (temp == 7)
{
firstDayOfMonth = 0;// 星期日
}
else
{
firstDayOfMonth = temp;
}
// 输出日历
System.out.println("\n星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int i = 0; i < firstDayOfMonth; i++)
{
System.out.print("\t");
}
for (int i = 1; i <= days; i++)
{
System.out.print(i + "\t");
if ((totalDays + i) % 7 == 6)
{ // 如果当天为周六,输出换行
System.out.println();
}
}