c#根据年月获取所有日期集合、根据年份计算总周数,根据年份和周数获取一周的开始及结束时间

        //根据年月获取所有日期

         //txt="2019-04"
        public List<string> CalTime(string txt) {
           DateTime beginTime=DateTime.Parse(txt+"-01");//本月初
           DateTime endTime=DateTime.Parse( beginTime.AddMonths(1).AddDays(-1).ToShortDateString());//本月最后一天
            List<string> dateList = new List<string>();
            for (DateTime dt = beginTime; dt <= endTime; dt = dt.AddDays(1))
            {
                dateList.Add(dt.ToShortDateString());
            }
            return dateList;
        }
  /// <summary>
        /// 周的第一天
        /// CalendarWeekRule.FirstDay, DayOfWeek.Sunday
        /// </summary>
        /// <param name="year"></param>
        /// <param name="week"></param>
        /// <returns></returns>
        public static DateTime FirstDateOfWeek(int year, int week)
        {
            if (year < 1 || year > 9999)
                throw new ArgumentException("illegal year", "year");
            int maxWeek = MaxWeekOfYear(year);
            if (week < 1 || week > maxWeek)
                throw new ArgumentException("illegal week", "week");

            if (week == 1)
                return new DateTime(year, 1, 1);
            DateTime firstDayOfYear = new DateTime(year, 1, 1);
            DateTime day = firstDayOfYear.AddDays((week - 1) * 7);
            DateTime ret = day.AddDays(-Convert.ToInt32(day.DayOfWeek));
            return ret;
        }


   

    /// <summary>
        /// 周的最后一天
        /// </summary>
        /// <param name="year"></param>
        /// <param name="week"></param>
        /// <returns></returns>
        public static DateTime LastDateOfWeek(int year, int week)
        {
            if (year < 1 || year > 9999)
                throw new ArgumentException("illegal year", "year");
            int maxWeek = MaxWeekOfYear(year);
            if (week < 1 || week > maxWeek)
                throw new ArgumentException("illegal week", "week");

            DateTime ret;
            DateTime firstDay = FirstDateOfWeek(year, week);
            if (week == 1)//week==1
            {
                ret = firstDay.AddDays(6 - Convert.ToInt32(firstDay.DayOfWeek));
            }
            else//week>1
            {
                DateTime tempDay = firstDay.AddDays(6);
                DateTime yearLastDay = new DateTime(year, 12, 31);
                if (tempDay > yearLastDay)
                    ret = yearLastDay;
                else
                    ret = tempDay;
            }
            return ret;
        }
       /// <summary>
       /// 一年有几周
       /// </summary>
       /// <param name="year"></param>
       /// <returns></returns>
        public static int MaxWeekOfYear(int year)
        {
            if (year < 1 || year > 9999)
                throw new ArgumentException("illegal year", "year");

            int maxDays = (DateTime.IsLeapYear(year) ? 366 : 365);

            DayOfWeek firstDayOfWeek = new DateTime(year, 1, 1).DayOfWeek;

            int beforeFirstSunday = (7 - Convert.ToInt32(firstDayOfWeek)) % 7;

            int remainDays = maxDays - beforeFirstSunday;

            int ret = (beforeFirstSunday % 7 == 0 ? 0 : 1);
            ret += (remainDays / 7);
            ret += (remainDays % 7 == 0 ? 0 : 1);

            return ret;
        }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值