C# 获取到当天是今年的第几周

因为项目的需求需要拿到当天为今年的第几周 上网找了一些但都达不到我想要的郊果 所以自己随手写了一个功能。

 #region 获得周数
        /// <summary>
        /// 获得今天是今年或第二年的第几周
        /// </summary>
        /// <param name="dt">当前时间</param>
        /// <returns></returns>
        public int GetWeekSNum(DateTime dt)
        {
            int week = 0; //当前周数 整形
            string weeks = ""; //当前周数字符串 年加周数
            int oldAdd = 0; //要追加的天数 意思是:如果今年的一月一日是星期二 他的开始周是去年的十二月三十日 就要在今年的总天数上加上两天
            int newAdd = 0; //要减去的天数 意思是:如果明年的一月一日是星期三 他的开始周是去年的十二月三十日 就要在今年的总天数上减去三天
            int totalDay = 0; //今年所有周的总天数
            int Day = dt.DayOfYear; //今天是今年的第几天
            System.DayOfWeek weekOld = Convert.ToDateTime(dt.ToString("yyyy") + "-1-1").DayOfWeek; //今年的1月1日是星期几
            System.DayOfWeek weekNew = Convert.ToDateTime(dt.ToString("yyyy") + "-1-1").AddYears(1).DayOfWeek;//明年的1月1日是星期几
            oldAdd = getDayInt(weekOld); //根据星期几 获得要多加的天数
            newAdd = getDayInt(weekNew); //根据星期几 获得要减去的天数

            if (DateTime.IsLeapYear(dt.Year))//如果今年是闰年一年就有366天 否则就是365天
            {
                totalDay = 366;
            }
            else
            {
                totalDay = 365;
            }

           
            int total = totalDay + oldAdd - newAdd; //获得一年当中所有周的总天数 周总天数= 今年的总天数 + 追加的天数 - 截掉的天数
            int weekDay = Day + oldAdd; //获得今天是总周数的第几天
            if (weekDay <= total)//今天是周总天数中的第几天 <= 周总天数
            {
                switch (weekDay)
                {
                    case 364:  //刚好是364天
                        week = 364 / 7;
                        break;
                    case 371: //刚好是371天
                        week = 371 / 7;
                        break;
                    default:
                        if (weekDay % 7 == 0) //如果总周天数刚好是7的倍数不用加1周 否则要加上1周
                        {
                            week = (weekDay / 7);
                        }
                        else
                        {
                            week = (weekDay / 7) + 1;
                        }
                        break;
                }
                weeks = dt.Year.ToString();
            }
            else //超出周的总天数就推往下一年
            {
                week = 1;
                weeks = dt.AddYears(1).Year.ToString();
            }

            //这里是为了转成 201301的这种格式的 可以自己改
            if (week < 10)
            {
                weeks += "0" + week;
            }
            else
            {
                weeks += week.ToString();
            }

            return Convert.ToInt32(weeks);
        }

        /// <summary>
        /// 获得要多追加的天数或减去的天数
        /// </summary>
        /// <param name="dw"></param>
        /// <returns></returns>
        private int getDayInt(System.DayOfWeek dw)
        {
            int day = 0;
            switch (dw)
            {
                case DayOfWeek.Sunday:
                    day = 0;
                    break;
                case DayOfWeek.Monday:
                    day = 1;
                    break;
                case DayOfWeek.Tuesday:
                    day = 2;
                    break;
                case DayOfWeek.Wednesday:
                    day = 3;
                    break;
                case DayOfWeek.Thursday:
                    day = 4;
                    break;
                case DayOfWeek.Friday:
                    day = 5;
                    break;
                case DayOfWeek.Saturday:
                    day = 6;
                    break;
            }

            return day;
        }
        #endregion

posted @ 2012-10-20 13:39  瞌睡的笨鳄鱼  阅读(650)  评论(1编辑  收藏  举报