关于计算某一天是星期几,是一年中的第几周的小结

最近在工作的时候需要实现这么一个功能,根据日历控件中选择的日期,计算出这一天是本年度的第几周,是星期几,关于获取星期几,C#中已经提供了方法DayOfWeek(),下面看看怎么计算第几周:

 

     /// <summary> 
        /// 取指定日期是一年中的第几周 
        /// </summary> 
        /// <param name="dtime">给定的日期</param> 
        /// <returns>数字 一年中的第几周</returns> 
        public int Weekofyear(DateTime dtime)
        {
            //int weeknum = 1;
            //DateTime tmpdate = DateTime.Parse(dtime.Year.ToString() + "-1" + "-1");
            //DayOfWeek firstweek = tmpdate.DayOfWeek;
            ////if(firstweek) 
            //for (int i = (int)firstweek + 1; i <= dtime.DayOfYear; i = i + 7)
            //{
            //    weeknum = weeknum + 1;
            //}
            //return weeknum ;

 public int Weekofyear(DateTime dtime)       

 {          //dtime为传进来的日期

 int weeknum = 1;   //默认的周数从1开始        

 DateTime firstdate = DateTime.Parse(dtime.Year.ToString() + "-1" + "-1");    //获取这一年的1月1号       

 DayOfWeek firstweek = firstdate .DayOfWeek;    //将1月1号作为第一周,不管是不是周一        

 for (int i = (int)firstweek + 1; i <= dtime.DayOfYear; i = i + 7)           

 {          //(int)firstweek + 1表示第一周还剩的天数,dtime.DayOfYear当前时间是本年中的第几天,七天为一周期

     weeknum = weeknum + 1;           

 }           

 return weeknum ;

上面的写法是本人自己写的,不过这个算法是把每年的1月1号作为起始点开始计算的,而不是将每年的第一个周一或周日作为起始点的,下面有一个改进的方法将每年的第一个周日作为起始点的,即如果1月1日不是周日,则不记为1,从下个周日开始计算,这个方法是根据他人的方法改编的

 public int Weekofyear(DateTime dtime)  

            DateTime dtmFisrtDay =DateTime.Parse(dtime.Year.ToString() + "-1" + "-1");  //获取这一年的1月1号

            string strWeek = dtmFisrtDay.DayOfWeek.ToString().ToLower(); ;

            int intweek = 0;

            switch (strWeek)

            {

                case "saturday":

                    intweek = 7;

                    break;

                case "friday":

                    intweek = 6;

                    break;

                case "thursday":

                    intweek = 5;

                    break;

                case "wednesday":

                    intweek = 4;

                    break;

                case "tuesday":

                    intweek = 3;

                    break;

                case "monday":

                    intweek = 2;

                    break;

                case "sunday":

                    intweek = 1;

                    break;

            }

            intweek = 8 - intweek;//第一周剩余的天数,为什么用8,因为在我的方法中周六是7,周日是开始1.   

            int intOutPut = 0;//要输出的周数   

            int intNow = dtime.DayOfYear; //当前是本年度的第几天

            intOutPut = intNow / 7; //计算出大概周数

            int intLoop = intNow % 7;  

            intLoop = intLoop - intweek;

            if (intLoop > 0) //说明所选择的日期不足一周

            {

             // 所选择的日期不足一周这样就会出现少算一周的情况,这时候就要对intOutPut的值进行修正。

                intOutPut = intOutPut + 1;

            }

            else

            {

                intOutPut = intOutPut + 0;

            }

            return intOutPut;

 

posted on 2010-04-05 16:52  halia  阅读(3946)  评论(0编辑  收藏  举报