public static bool CalcWeekDay(int year, int week, out DateTime first, out DateTime last) { first = DateTime.MinValue; last = DateTime.MinValue; //年份超限 if (year < 1700 || year > 9999) return false; //周数错误 if (week < 1 || week > 53) return false; //指定年范围 DateTime start = new DateTime(year, 1, 1); DateTime end = new DateTime(year, 12, 31); int startWeekDay = (int)start.DayOfWeek-1; //周的起始日期 first = start.AddDays((7 - startWeekDay) + (week - 2) * 7); last = first.AddDays(6); if (last.Year - year ==1) { last = Convert.ToDateTime(year + "-12-31"); } //结束日期跨年 return (last <= end); }
调用:
bool result = CalcWeekDay(2020, 53, out first, out last);
返回日期对应的日期区间。
public static bool CalcWeekDay(int year, int week, out DateTime first, out DateTime last) { first = DateTime.MinValue; last = DateTime.MinValue; //年份超限 if (year < 1700 || year > 9999) return false; //周数错误 if (week < 1 || week > 53) return false; //指定年范围 DateTime start = new DateTime(year, 1, 1); DateTime end = new DateTime(year, 12, 31); int startWeekDay = (int)start.DayOfWeek-1; //周的起始日期 first = start.AddDays((7 - startWeekDay) + (week - 2) * 7); last = first.AddDays(6);
if (last.Year - year ==1) { last = Convert.ToDateTime(year + "-12-31"); } //结束日期跨年 return (last <= end); }