public class DateHelper { /// <summary> /// 获取指定年份的最大周数 /// </summary> /// <param name="year">年份</param> /// <returns>周数</returns> public static int GetMaxWeekOfYear(int year) { DateTime tempDate = new DateTime(year, 12, 31); int tempDayOfWeek = (int)tempDate.DayOfWeek; if (tempDayOfWeek != 0) { tempDate = tempDate.Date.AddDays( - tempDayOfWeek); } return GetWeekIndex(tempDate); } /// <summary> /// 获取当前日期是一年中的第几周,如果12月31号与下一年的1月1好在同一个星期则算下一年的第一周 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static int GetWeekIndex(DateTime dt) { //确定此时间在一年中的位置 int dayOfYear = dt.DayOfYear; //当年第一天 DateTime tempDate = new DateTime(dt.Year, 1, 1); //确定当年第一天 int tempDayOfWeek = (int)tempDate.DayOfWeek; tempDayOfWeek = tempDayOfWeek == 0 ? 7 : tempDayOfWeek; //确定星期几 int index = (int)dt.DayOfWeek; index = index == 0 ? 7 : index; //当前周的范围 DateTime retStartDay = dt.AddDays(-(index - 1)); DateTime retEndDay = dt.AddDays(7 - index); //确定当前是第几周 int weekIndex = (int)Math.Ceiling(((double)dayOfYear + tempDayOfWeek - 1) / 7); if (retStartDay.Year < retEndDay.Year) { weekIndex = 1; } return weekIndex; } /// <summary> /// 获取指定年份第几周的日期范围 /// </summary> /// <param name="year">年份</param> /// <param name="weekIndex">第n周</param> /// <returns></returns> public static bool GetWeekRange(int year, int weekIndex, out DateTime weekRangeStart, out DateTime weekRangeEnd) { 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 + (1 - firstDayOfWeek); weekRangeStart = firstDate.AddDays(startAddDays); //周结束日 int endAddDays = allDays + (7 - firstDayOfWeek); weekRangeEnd = firstDate.AddDays(endAddDays); if (weekRangeStart.Year > year || (weekRangeStart.Year == year && weekRangeEnd.Year > year)) { //throw new Exception("今年没有第" + weekIndex + "周。"); return false; } else { return true; } } /// <summary> /// 获取本周的周日周六的日期值 /// </summary> /// <param name="date">当前日期</param> /// <param name="dtSun">周日</param> /// <param name="dtSat">周六</param> public static void GetWeekRange(DateTime date, out DateTime dtSun, out DateTime dtSat) { dtSun = System.DateTime.Now; dtSat = System.DateTime.Now; switch (date.DayOfWeek) { case System.DayOfWeek.Sunday: dtSun = date; dtSat = date.AddDays(6); break; case System.DayOfWeek.Monday: dtSun = date.AddDays(-1); dtSat = date.AddDays(5); break; case System.DayOfWeek.Tuesday: dtSun = date.AddDays(-2); dtSat = date.AddDays(4); break; case System.DayOfWeek.Wednesday: dtSun = date.AddDays(-3); dtSat = date.AddDays(3); break; case System.DayOfWeek.Thursday: dtSun = date.AddDays(-4); dtSat = date.AddDays(2); break; case System.DayOfWeek.Friday: dtSun = date.AddDays(-5); dtSat = date.AddDays(1); break; case System.DayOfWeek.Saturday: dtSun = date.AddDays(-6); dtSat = date; break; } } /// <summary> /// 转换成星期中文汉字 /// </summary> /// <param name="index"></param> /// <returns></returns> public static string GetWeekDayName(int index) { string result = string.Empty; switch (index) { case 0: { result = "星期日"; break; } case 1: { result = "星期一"; break; } case 2: { result = "星期二"; break; } case 3: { result = "星期三"; break; } case 4: { result = "星期四"; break; } case 5: { result = "星期五"; break; } case 6: { result = "星期六"; break; } } return result; } }