获取星期一,获取第几周

protected void Page_Load(object sender, EventArgs e)
    {
        DateTime dt1 = Convert.ToDateTime("2012/4/1");
        //第一天按周日算
        Response.Write(WeekOfMonth(dt1, true) + "<br/>");
        //第一天按周一算
        Response.Write(WeekOfMonth(dt1, false)+"<br/>");

        Response.Write(GetDayOfWeek("2012-04-19", 1)+"<br/>");
        Response.Write(GetLastDayOfWeek(2012, 4, 1)+"<br/>");

        Response.Write(Convert.ToDateTime("2012-04-01").AddDays(-6)+"<br/>");
        Response.Write(GetMonday(Convert.ToDateTime("2012-07-01"))+"<br/>");
        Response.Write(GetSundayM(Convert.ToDateTime("2012-05-31")) + "<br/>");
    }

    /// <summary>
    /// 获取某日期是本月的第几周
    /// </summary>
    /// <param name="dtSel">DateTime 时间对象</param>
    /// <param name="sundayStart">true:第一天按周日算 false:第一天按周一算</param>
    /// <returns>获取第几周</returns>
    public static int WeekOfMonth(DateTime dtSel, bool sundayStart)
    {
        //如果要判断的日期为1号,则肯定是第一周了 
        if (dtSel.Day == 1) return 1;
        else
        {
            //得到本月第一天 
            DateTime dtStart = new DateTime(dtSel.Year, dtSel.Month, 1);
            //得到本月第一天是周几 
            int dayofweek = (int)dtStart.DayOfWeek;
            //如果不是以周日开始,需要重新计算一下dayofweek,详细DayOfWeek枚举的定义 
            if (!sundayStart)
            {
                dayofweek = dayofweek - 1;
                if (dayofweek < 0) dayofweek = 7;
            }
            //得到本月的第一周一共有几天 
            int startWeekDays = 7 - dayofweek;
            //如果要判断的日期在第一周范围内,返回1 
            if (dtSel.Day <= startWeekDays) return 1;
            else
            {
                int aday = dtSel.Day + 7 - startWeekDays;
                return aday / 7 + (aday % 7 > 0 ? 1 : 0);
            }
        }
    }

    /// <summary>
    /// 输入日期,判断该日期是所在 月、年的第几周
    /// </summary>
    /// <param name="datetype">指定日期类型,"m"表示返回指定日期在所在月的第几周,"y"表示返回指定日期在所在年的第几周</param>
    /// <param name="curdate">指定的日期 string类型</param>
    /// <param name="daystart">确定日期计算时间,1表示月、年起始周从第一个星期日开始计算,其他表示默认</param>
    /// <returns></returns>
    public static string GetWeek(string datetype, string curdate, int daystart)
    {
        if (datetype == "m")
        {
            int days = Convert.ToDateTime(curdate).Day;
            int weeks = 0;
            int dayofweek = 0;
            weeks = (days - 1) / 7 + 1;
            dayofweek = Convert.ToInt32(Convert.ToDateTime(curdate).DayOfWeek);
            DateTime daydate = new DateTime(Convert.ToDateTime(curdate).Year, Convert.ToDateTime(curdate).Month, 1);
            int da = System.Convert.ToInt32(daydate.DayOfWeek);
            if (dayofweek < da)
            {
                weeks++;
            }
            string startdayofweek = daydate.DayOfWeek.ToString();
            if (daystart == 1)
            {
                if (startdayofweek == "Sunday")
                {
                    return weeks.ToString();
                }
                else
                {
                    weeks = weeks - 1;
                    if (weeks != 0)
                    {
                        return weeks.ToString();
                    }
                    if (weeks == 0)
                    {
                        curdate = System.Convert.ToDateTime(curdate).AddDays(0 - dayofweek).ToString();
                        string tmpweekofmonth = GetWeek("m", curdate, 1);
                        return tmpweekofmonth;
                    }
                    return null;
                }
            }
            else
            {
                return weeks.ToString();
            }
            return null;
        }
        if (datetype == "y")
        {
            System.Globalization.CalendarWeekRule startday = new System.Globalization.CalendarWeekRule();
            if (daystart == 1)
            {
                startday = System.Globalization.CalendarWeekRule.FirstFullWeek;
            }
            else
            {
                startday = System.Globalization.CalendarWeekRule.FirstDay;
            }
            System.Globalization.GregorianCalendar gcyear = new System.Globalization.GregorianCalendar();
            int weekofyear = gcyear.GetWeekOfYear(Convert.ToDateTime(curdate), startday, DayOfWeek.Sunday);
            return weekofyear.ToString();
        }
        return null;
    }

    /// <summary>
    /// 判断某月有多少天
    /// </summary>
    /// <remarks>
    /// 创建人:zhujt<br/>
    /// 创建日期:2012-04-19 13:51:07<br/>
    /// </remarks>
    /// <param name="year">年</param>
    /// <param name="month">月</param>
    /// <returns></returns>
    public static int GetDay(int year, int month)
    {
        switch (month)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return 31;
            case 4:
            case 6:
            case 9:
            case 11:
                return 30;
            case 2:
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
                    return 29;
                else
                    return 28;
            default:
                return 0;
        } 
    }

    /// <summary>
    /// 获取某日是周几
    /// </summary>
    /// <remarks>
    /// 创建人:zhujt<br/>
    /// 创建日期:2012-04-19 13:29:58
    /// </remarks>
    /// <param name="date">日期</param>
    /// <param name="type">显示形式 0:汉字 1:阿拉伯数字</param>
    /// <returns></returns>
    public static string GetDayOfWeek(string date, int type)
    {
        DateTime dt = Convert.ToDateTime(date);
        return GetDayOfWeek(type, ref dt);
    }

    /// <summary>
    /// 获取某月最后一周是星期几
    /// </summary>
    /// <param name="year">年</param>
    /// <param name="month">月</param>
    /// <param name="type">显示形式 0:汉字 1:阿拉伯数字</param>
    /// <returns></returns>
    public static string GetLastDayOfWeek(int year, int month, int type)
    {
        DateTime dt = Convert.ToDateTime(year + "-" + month + "-" + GetDay(year, month));
        return GetDayOfWeek(1, ref dt);
    }

    /// <summary>
    /// 获取日是周几
    /// </summary>
    /// <remarks>
    /// 创建人:zhujt<br/>
    /// 创建日期:2012-04-19 13:29:58
    /// </remarks>
    /// <param name="date">日期</param>
    /// <param name="type">显示形式 0:汉字 1:阿拉伯数字</param>
    /// <returns></returns>
    private static string GetDayOfWeek(int type, ref DateTime dt)
    {
        string temp = "";
        switch (dt.DayOfWeek)
        {
            case DayOfWeek.Sunday:
                temp = type == 0 ? "星期天" : "7";
                break;
            case DayOfWeek.Monday:
                temp = type == 0 ? "星期一" : "1";
                break;
            case DayOfWeek.Tuesday:
                temp = type == 0 ? "星期二" : "2";
                break;
            case DayOfWeek.Wednesday:
                temp = type == 0 ? "星期三" : "3";
                break;
            case DayOfWeek.Thursday:
                temp = type == 0 ? "星期四" : "4";
                break;
            case DayOfWeek.Friday:
                temp = type == 0 ? "星期五" : "5";
                break;
            case DayOfWeek.Saturday:
                temp = type == 0 ? "星期六" : "6";
                break;
        }
        return temp;
    }

    #region 得到一周的周一和周日的日期

    /// <summary> 
    /// 计算本周的周一日期 
    /// </summary> 
    /// <returns></returns> 
    public static DateTime GetMondayDate()
    {
        return GetMondayDate(DateTime.Now);
    }

    /// <summary> 
    /// 计算本周周日的日期 
    /// </summary> 
    /// <returns></returns> 
    public static DateTime GetSundayDate()
    {
        return GetSundayDate(DateTime.Now);
    }

    ///   <summary>    
    ///   计算某日起始日期(礼拜一的日期)    
    ///   </summary>    
    ///   <param name="someDate">该周中任意一天</param>    
    ///   <returns>返回礼拜一日期,后面的具体时、分、秒和传入值相等</returns>    
    public static DateTime GetMondayDate(DateTime someDate)
    {
        int i = someDate.DayOfWeek - DayOfWeek.Monday;
        if (i == -1) i = 6;//   i值   >   =   0   ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。    
        TimeSpan ts = new TimeSpan(i, 0, 0, 0);
        return someDate.Subtract(ts);
    }

    ///   <summary>    
    ///   计算某日结束日期(礼拜日的日期)    
    ///   </summary>    
    ///   <param name="someDate">该周中任意一天</param>    
    ///   <returns>返回礼拜日日期,后面的具体时、分、秒和传入值相等</returns>    
    public static DateTime GetSundayDate(DateTime someDate)
    {
        int i = someDate.DayOfWeek - DayOfWeek.Sunday;
        if (i != 0) i = 7 - i;//   因为枚举原因,Sunday排在最前,相减间隔要被7减。    
        TimeSpan ts = new TimeSpan(i, 0, 0, 0);
        return someDate.Add(ts);
    }
    #endregion

    /// <summary>
    /// 从第一周的周一到最后一周的周日
    /// 比如2012-04-01 是周日 那么2012年4月第一周周一为2012-03-16
    /// 2012-04-30为周一 那么2012-04-30属于五月份
    /// 也就是说2012年4月份从2012-03-16到2012-04-29
    /// </summary>
    /// <param name="year">年</param>
    /// <param name="month">月</param>
    /// <returns></returns>
    //public static string[] GetEffective(string year, string month)
    //{ 

    //}

    #region 获取有效日期
    /// <summary>
    /// 根据日期获取某周星期一
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static string GetMonday(DateTime dt)
    {
        int temp = GetTemp(ref dt);

        if (temp != 1)  // 如果日期不是周一 
            return dt.AddDays(-temp+1).ToString("yyyy-MM-dd");
        else
            return dt.ToString("yyyy-MM-dd"); 
    }

    /// <summary>
    /// 根据日期获取某周星期日
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static string GetSundayM(DateTime dt)
    {
        int temp = GetTemp(ref dt);

        if (temp != 7)  // 如果日期不是周一 
            return dt.AddDays(- temp).ToString("yyyy-MM-dd");
        else
            return dt.ToString("yyyy-MM-dd");
    }

    /// <summary>
    /// 根据日期获取某周星期日
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static string GetSunday(DateTime dt)
    {
        int temp = GetTemp(ref dt);

        if (temp != 7)  // 如果日期不是周一 
            return dt.AddDays(7 - temp).ToString("yyyy-MM-dd");
        else
            return dt.ToString("yyyy-MM-dd");
    }

    /// <summary>
    /// 计算该日期为周几
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    private static int GetTemp(ref DateTime dt)
    {
        int temp = 0;
        switch (dt.DayOfWeek)
        {
            case DayOfWeek.Sunday:
                temp = 7;
                break;
            case DayOfWeek.Monday:
                temp = 1;
                break;
            case DayOfWeek.Tuesday:
                temp = 2;
                break;
            case DayOfWeek.Wednesday:
                temp = 3;
                break;
            case DayOfWeek.Thursday:
                temp = 4;
                break;
            case DayOfWeek.Friday:
                temp = 5;
                break;
            case DayOfWeek.Saturday:
                temp = 6;
                break;
        }
        return temp;
    } 
    
    #endregion

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值