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


    最近在工作的时候需要实现这么一个功能,根据日历控件中选择的日期,计算出这一天是本年度的第几周,是星期几,关于获取星期几,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;

  • 相关阅读:
    Codewars Solution:Two to One
    Codewars Solution:Get the Middle Character
    golang jwt+token验证
    C#基础知识点梳理二
    C#基础知识点梳理一
    逻辑值
    step-1
    视频第5讲-ID转换
    通过向量访问矩阵
    跟着jmzeng学习GEO数据分析-GEO42872_1--题外
  • 原文地址:https://www.cnblogs.com/halia/p/1704761.html
Copyright © 2020-2023  润新知