C#:查询某年(1900-2100)某月的日历

时间:2023-03-09 15:29:13
C#:查询某年(1900-2100)某月的日历

using System;
using System.Collections.Generic;
public class Program
    {
    /********************主函数************************/
       public static void Main()
          {
              /******************获取用户输入的年月**************/
              while(true)
                  {
                      int year1,month1;
                      while(true)
                         {
                            Console.Write("请输入年份(1900-2100):");
                            year1=int.Parse(Console.ReadLine());
                            if(year1<1900||year1>2100)
                               {
                                  Console.Write("年份输入错误,按回车键后重新输入");
                                  Console.ReadLine();
                                  Console.Clear();
                               }
                            else
                                {
                                   Console.Write("请输入月份(1-12):");
                                   month1=int.Parse(Console.ReadLine());
                                   if(month1<1||month1>12)
                                      {
                                         Console.Write("月份输入错误,按回车键后重新输入");
                                         Console.ReadLine();
                                         Console.Clear();
                                      }
                                   else
                                      {
                                         break;
                                      }
                                  }
                              }

/*********************************************************/
/********************获取月份数据,包括前面的空格*********/
                List<string> dats=new List<string>();//定义一个集合,用来存放月份里面的天数和要打印的空白数
                Console.WriteLine(GetCrossDaysFrom1900(year1,month1));//输出从1900年1月1号到输入年份的天数
                int dayofWeek=GetCrossDaysFrom1900(year1,month1)%7+1;
                int space=dayofWeek-1;
                for(int a=1;a<=space;a++)
                    {
                       dats.Add(" ");
                    }
                for(int b=1;b<=GetDaysOfMonth(year1,month1);b++)
                   {
                      dats.Add(b.ToString());
                   }
/*********************************************************/
/********************输出某年某月的日历*******************/
              Console.WriteLine("***********************************************");
              Console.Write("一\t二\t三\t四\t五\t六\t日");
              for(int d=0;d<dats.Count;d++)
                 {
                     if(d%7==0)//没打印7个数据就换行
                         {
                            Console.WriteLine();
                         }
                     Console.Write(dats[d]+"\t");
                 }
              Console.WriteLine();
              Console.WriteLine("*************************************************");
              Console.Write("按回车键继续");
              Console.ReadLine();
              Console.Clear();
            }
         }
/********************从1900年1月1号到输入年份的天数*********/
        static int GetCrossDaysFrom1900(int year2, int month2)
            {
                int days=0;
                for(int i=1900;i<year2;i++)//计算从1900年一月一号到输入的这年一月一号一共有多少天
                    {
                       if(i%4==0&&i%100!=0||i%400==0)
                          {
                             days+=366;
                           }
                       else
                           {
                              days+=365;
                           }
                     }
                 for(int j=1;j<month2;j++)
                    {
                        if(j==2)  //判断二月有多少天
                          {
                              if(year2%4==0&&year2%100!=0||year2%400==0)//判断是不是瑞年
                                 {
                                     days+=29;
                                 }
                              else
                                 {
                                     days+=28;
                                  }
                            }
                        else if(j<=7&&j%2!=0||j>7&&j%2==0)//计算大月有多少天
                           {
                               days+=31;
                            }
                        else
                            {
                               days+=30;
                             }
                       }
                    return days;
                 }
    /****************哪年哪月有多少天*******************/
          static int GetDaysOfMonth(int year3, int month3)
              {
                 int dates;
                 if(month3==2)
                    {
                       if(year3%4==0&&year3%100!=0||year3%400==0)
                          {
                             dates=29;
                          }
                       else
                          {
                             dates=28;
                           }

}
                  else if(month3<=7&&month3%2!=0||month3>7&&month3%2==0)
                      {
                         dates=31;
                      }
                  else
                      {
                         dates=30;
                      }
                   return dates;
               }
         }