C# 获取N年第N周第N天日期

        static void Main(string[] args)
        {
            //2022年第46周第6天
            string dateStr = "24606";
 
            //年
            int year = int.Parse(DateTime.Now.Year.ToString().Substring(0, 3) + dateStr.Substring(0, 1));
            //N周
            int weekIndex = int.Parse(dateStr.Substring(1, 2));
            //获取N周第一天
            DateTime weekOfFirstDay = GetWeekFirstDay(year, weekIndex);
            //当前N周第N天
            int weekOfDay = int.Parse(dateStr.Substring(3, 2));
            //获取N周N天日期
            DateTime date = weekOfFirstDay.AddDays(weekOfDay);
 
            Console.ReadKey();
        }
 
        /// <summary>
        /// 获取N周的第一天(以星期日开始计算)
        /// </summary>
        /// <param name="year">当前年</param>
        /// <param name="weekIndex">第N周</param>
        /// <returns></returns>
        public static DateTime GetWeekFirstDay(int year, int weekIndex)
        {
            int allDays = (weekIndex - 1) * 7;
            //确定当年第一天
            DateTime firstDate = new DateTime(year, 1, 1);
            int firstDayOfWeek = (int)firstDate.DayOfWeek;
 
            if (firstDayOfWeek == 0)
            {
                firstDayOfWeek = 1;
            }
            else if (firstDayOfWeek == 6)
            {
                firstDayOfWeek = 7;
            }
 
            //周开始日(按星期日为第一天计算)
            int startAddDays = allDays + (0 - firstDayOfWeek);
            DateTime weekStart = firstDate.AddDays(startAddDays);
            return weekStart;
        }
 
        /// <summary>
        /// 获取N周日期范围
        /// </summary>
        /// <param name="year">年</param>
        /// <param name="weekIndex">N周</param>
        /// <returns></returns>
        public static string GetWeekRange(int year, int weekIndex)
        {
            try
            {
                if (weekIndex < 1)
                {
                    throw new Exception("请输入大于0的整数");
                }
 
                int allDays = (weekIndex - 1) * 7;
                //确定当年第一天
                DateTime firstDate = new DateTime(year, 1, 1);
                int firstDayOfWeek = (int)firstDate.DayOfWeek;
 
                firstDayOfWeek = firstDayOfWeek == 0 ? 7 : firstDayOfWeek;
 
                //周开始日
                int startAddDays = allDays + (0 - firstDayOfWeek);
                DateTime weekRangeStart = firstDate.AddDays(startAddDays);
                //周结束日
                int endAddDays = allDays + (6 - firstDayOfWeek);
                DateTime weekRangeEnd = firstDate.AddDays(endAddDays);
 
                if (weekRangeStart.Year > year ||
                 (weekRangeStart.Year == year && weekRangeEnd.Year > year))
                {
                    throw new Exception("今年没有第" + weekIndex + "周。");
                }
 
                return string.Format("{0}~{1}", weekRangeStart.ToString("yyyy/MM/dd"), weekRangeEnd.ToString("yyyy/MM/dd"));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

 

posted @ 2024-10-09 17:09  字母搬运工-Hauk  阅读(21)  评论(0)    收藏  举报