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;
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章