Вы можете использовать эту функцию, чтобы получить первую дату недели:
public static DateTime FirstDateOfWeek(int year, int weekOfYear)
{
DateTime jan1 = new DateTime(year, 1, 1);
int daysOffset = Convert.ToInt32(System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek) - Convert.ToInt32(jan1.DayOfWeek);
DateTime firstWeekDay = jan1.AddDays(daysOffset);
System.Globalization.CultureInfo curCulture = System.Globalization.CultureInfo.CurrentCulture;
int firstWeek = curCulture.Calendar.GetWeekOfYear(jan1, curCulture.DateTimeFormat.CalendarWeekRule, curCulture.DateTimeFormat.FirstDayOfWeek);
if (firstWeek <= 1) {
weekOfYear -= 1;
}
return firstWeekDay.AddDays(weekOfYear * 7);
}
Тогда вы можете получить все даты на этой неделе следующим образом:
var firstDate = FirstDateOfWeek(2012, 40);
var allWeekDays = new List<DateTime>();
allWeekDays.Add(firstDate);
var currentDate = firstDate;
for(int d = 1; d < 7; d++)
{
currentDate=currentDate.AddDays(1);
allWeekDays.Add(currentDate);
}
или в одну строку:
var week = Enumerable.Range(0,7).Select(d => firstDate.AddDays(d)).ToList();