计算某一天是星期几(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();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值