C#里的周计算,第几周,一周的开始......

 public class GetWeekIndex
    {
        //如果12月31号与下一年的1月1好在同一个星期则算下一年的第一周
        public static int Excute(DateTime dTime)
        {
            try
            {
                //确定此时间在一年中的位置
                var dayOfYear = dTime.DayOfYear;
                //当年第一天
                var tempDate = new DateTime(dTime.Year, 1, 1);
                //确定当年第一天
                var tempDayOfWeek = (int)tempDate.DayOfWeek;
                tempDayOfWeek = tempDayOfWeek == 0 ? 7 : tempDayOfWeek;
                //确定星期几
                var index = (int)dTime.DayOfWeek;
                index = index == 0 ? 7 : index;
                //当前周的范围
                DateTime retStartDay = dTime.AddDays(-(index - 1));
                DateTime retEndDay = dTime.AddDays(7 - index);
                //确定当前是第几周
                var weekIndex = (int)Math.Ceiling(((double)dayOfYear + tempDayOfWeek - 1) / 7);
                if (retStartDay.Year < retEndDay.Year)
                {
                    weekIndex = 1;
                }

                return weekIndex;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }


        public static int Excute(string strDate)
        {
            try
            {
                //需要判断的时间
                DateTime dTime = Convert.ToDateTime(strDate);
                return Excute(dTime);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

        }
    }
原文链接


下面补充一些:

        /// <summary>
        /// 用年份和第几周来获得一周开始和结束的时间,这里用星期一做开始。
        /// </summary>
        public static void GetWeek(int year, int weekNum, out DateTime weekStart, out DateTime weekeEnd)
        {
            var dateTime = new DateTime(year, 1, 1);
            dateTime = dateTime.AddDays(7 * weekNum);
            weekStart = dateTime.AddDays(-(int)dateTime.DayOfWeek + (int)DayOfWeek.Monday);
            weekeEnd = dateTime.AddDays((int)DayOfWeek.Saturday - (int)dateTime.DayOfWeek + 1);
        }

        /// <summary> 求某年有多少周
        /// </summary>
        public static int GetYearWeekCount(int year)
        {
            var dateTime = DateTime.Parse(year + "-01-01");
            var firstDayOfWeek = Convert.ToInt32(dateTime.DayOfWeek);//得到该年的第一天是周几 
            if (firstDayOfWeek == 1)
            {
                var countDay = dateTime.AddYears(1).AddDays(-1).DayOfYear;
                var countWeek = countDay / 7 + 1;
                return countWeek;
            }
            else
            {
                var countDay = dateTime.AddYears(1).AddDays(-1).DayOfYear;
                var countWeek = countDay / 7 + 2;
                return countWeek;
            }
        }



 /// <summary>
        /// 求当前日期是一年的中第几周
        /// </summary>
        public static int WeekOfYear(DateTime todayTime)
        {
            var firstdayofweek = Convert.ToInt32(Convert.ToDateTime(todayTime.Year.ToString(CultureInfo.InvariantCulture) + "- " + "1-1 ").DayOfWeek);
            var days = todayTime.DayOfYear;
            var daysOutOneWeek = days - (7 - firstdayofweek);
            if (daysOutOneWeek <= 0)
            {
                return 1;
            }
            var weeks = daysOutOneWeek/7;
            if (daysOutOneWeek%7 != 0)
                weeks++;
            return weeks + 1;
        }



        /// <summary>
        /// 当前月有多少天
        /// </summary>
        public static int HowMonthDay(int year, int month)
        {
            int next_month;
            int next_year;
            if (month < 12)
            {
                next_month = month + 1;
                next_year = year;
            }
            else
            {
                next_month = 1;
                next_year = year + 1;
            }
            DateTime dt1 = Convert.ToDateTime(year + "-" + month + "-1");
            DateTime dt2 = Convert.ToDateTime(next_year + "-" + next_month + "-1");
            TimeSpan diff = dt2 - dt1;
            return diff.Days;
        }
       



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值