Принятое решение на самом деле неверно.
Вы должны переключаться, когда неделя «ломается», т. Е. Когда она считает, что неделя заканчивается или запускается, а формула в принятом решении - нет.
Это не так заметно в понедельник, как начало недели, но более того, если вы считаете четверг в конце недели.
Правильная формула (для четверг, как заканчивается день):
DateTime thu = date.AddDays(-(int)(date.AddDays(-5).DayOfWeek) -1);
В понедельник, -5 переключится на -2.
Пример код для распечатки
String s = "";
DateTime date = new DateTime(2017, 1, 1);
for (int i = 0; i < 14; i++)
{
date = date.AddDays(1);
DateTime thu = date.AddDays(-(int)(date.AddDays(-5).DayOfWeek) -1);
DateTime mon = date.AddDays(-(int)(date.AddDays(-2).DayOfWeek) -1);
s += date.ToString() + " - Thu: " + thu.ToString() + " - Mon: " + mon.ToString() + "\r\n";
}
Console.WriteLine(s);
насчет усложнения расчета предыдущей рабочей недели после закрытия торгов в пятницу, который должен затем вернуться на текущей неделе, что в пятницу была? –