while (true)
{
#region 获取用户输入年月
int nian, yue;
while (true)
{
Console.Write("请输入年份(1900-2100):");
nian = int.Parse(Console.ReadLine());
if (nian < 1900 || nian > 2100)
{
Console.Write("输入错误,回车重新输入");
}
else
{
Console.Write("请输入月份(1-12):");
yue = int.Parse(Console.ReadLine());
if (yue < 1 || yue > 12)
{
Console.Write("输入错误,请重新输入");
}
else
{
break;
}
}
Console.ReadLine();
Console.Clear();
}
#endregion
#region 将空白字符串加入集合
List<string> allDates = new List<string>();
//计算经过的年数nian-1
int crossDays = 0;
for (int i = 1900; i <= nian - 1; i++)
{
if ((i % 4 == 0 && i / 100 != 0) || i % 400 == 0)
{
crossDays += 366;//闰年
}
else
{
crossDays += 365; //平年
}
}
//计算经过nian的月数,yue-1
int crossYues = 0;
for (int i = 1; i <= yue - 1; i++)
{
if (i == 2) //2月特殊情况,判断当前年数是否为闰年
{
if ((nian % 4 == 0 && nian / 100 != 0) || nian % 200 == 0)
{
crossYues += 29;//闰年
}
else
{
crossYues += 28; //平年
}
}
else if (i <= 7 && i % 2 != 0 || i >= 8 && i % 2 == 0) //判断是否为大月
{
crossYues += 31;
}
else //小月
{
crossYues += 30;
}
}
int crossAllDays = crossDays + crossYues;//计算总天数
int weekDay = crossAllDays % 7 + 1; //计算星期几
int bai = weekDay - 1; //计算总空白字符串
for (int i = 0; i < bai; i++)
{
allDates.Add("");
}
#endregion
#region 将当前月份的天数加入集合
int days; //用户输入当前月的天数
if (yue == 2)
{
if ((nian % 4 == 0 && nian / 100 != 0) || nian % 400 == 0)
{
days = 29;//闰年
}
else
days = 28;//平年
}
else if (yue <= 7 && yue % 2 != 0 || yue >= 8 && yue % 2 == 0) //判断是否为大月
{
days = 31;
}
else //小月
{
days = 30;
}
#region 加入日期数字
for (int i = 1; i <= 30; i++)
{
allDates.Add(i.ToString());
}
#endregion
#endregion
#region 输出当前年月
Console.WriteLine("*****************************************************");
Console.WriteLine("一\t二\t三\t四\t五\t六\t七");
for (int i = 0; i < allDates.Count; i++)
{
if (i % 7 == 0 && i != 0)
{
Console.WriteLine();
}
Console.Write(allDates[i] + "\t");
}
Console.WriteLine();
Console.WriteLine("*****************************************************");
#endregion
Console.Write("回车继续(滑稽).......");
Console.ReadLine();
Console.Clear();
}