计算某一天是星期几(C#)

       ///已知2000年1月1日是星期六,如何知道某一天是星期几?

      ///只要知道这一天相距2000年1月1日的天数n,让n除以7得出余数m;

      ///如果该天在2000年1月1日之前,则把6-m,得到的就是该天的星期数。

      ///如果该天在2000年1月1日之后,则把n=6+m(如果6+m>7,则n=6+m-7),n就是该天的星期数。

      ///程序清单如下:

    class Calendar                     ///定义一个日历类
    {
        private readonly int year;
        private readonly byte month;
        private readonly byte day;
        private readonly byte week;
        public Calendar(int cyear, byte cmonth, byte cday)             ///Calendar的构造函数。
        {                                                                                             ///初始化年,月,日,并计算该年月日是星期几。
            double daysDiff = 0.0, daysOfThisYear = 0.0;
            year = cyear;                                                                      
            month = cmonth;
            day = cday;
            if(cyear<2000)                                                                    ///如果是2000年以前的年份
                while (++cyear < 2000)
                {
                    daysDiff += isLeapYear(cyear) ? 366.0 : 365.0;        ///2000年以前到该年之间的每年天数的累加和
                }
            else                                                                                      ///如果是2000年以后的年份
                while (--cyear >= 2000)
                {
                    daysDiff += isLeapYear(cyear) ? 366.0 : 365.0;        ///2000年以后到该年之间的每年天数的累加和
                }
            while (--cmonth >= 1)
            {
                daysOfThisYear += daysOfTheMonth(cmonth);         ///计算该年已经过了多少天
            }
            daysOfThisYear += cday;
            if (year < 2000)
            {
                daysOfThisYear = (isLeapYear(year) ? 366.0 : 365.0 )- daysOfThisYear;
                daysOfThisYear++;
            }
            else
                daysOfThisYear--;
            daysDiff += daysOfThisYear;
            daysDiff %= 7;
            if (year >= 2000)
                daysDiff += 6.0;
            else
                daysDiff = 6.0 - daysDiff;
            week = Convert.ToByte(daysDiff % 7.0);
        }
        private bool isLeapYear(int lyear)                                                ///判断某年是否是闰年
        {
            if (lyear % 4 == 0)
                if (lyear % 100 == 0)
                    if (lyear % 400 == 0)
                        return true;
                    else
                        return false;
                else
                    return true;
            else
                return false;
        }
        private byte daysOfTheMonth(byte dmonth)                            ///返回一年中指定月份(dmonth)的天数
        {
            byte[] daysPmonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            if (dmonth == 2 && isLeapYear(year))
                return (byte)(daysPmonth[dmonth - 1] + 1);
            return daysPmonth[dmonth - 1];
        }
        public string Week                                                                      ///返回星期的中文
        {
            get
               {
                   String[] weekstr = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
                   return weekstr[week];
               }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Calendar myc=new Calendar(2008,6,4);
            Console.WriteLine(myc.Week);
            Console.ReadKey();
        }
    }

发布了13 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xsff1024/article/details/2852994
今日推荐