關於計算某一天是星期幾,是一年中的第幾周的小結

來源:互聯網
上載者:User

最近在工作的時候需要實現這麼一個功能,根據日曆控制項中選擇的日期,計算出這一天是本年度的第幾周,是星期幾,關於擷取星期幾,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;

}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.