Przyjęte rozwiązanie jest w rzeczywistości nieprawidłowe.
Musisz przełączyć się, gdy tydzień "zrywa", tj. Gdy uważa, że tydzień się kończy lub zaczyna, a formuła w przyjętym rozwiązaniu nie.
To nie jest tak widoczne w poniedziałek jako początek tygodnia, ale bardziej, jeśli weźmiesz pod uwagę czwartek pod koniec tygodnia.
Dokładny wzór jest (na czwartek to dzień)
DateTime thu = date.AddDays(-(int)(date.AddDays(-5).DayOfWeek) -1);
Na poniedziałek -5 przestawiliby -2.
Przykład kodu wydrukować
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);
Co o powikłanie obliczania poprzedniego tygodnia pracy po zamknięciu działalności w piątek, które powinny następnie powrócić obecny tydzień, który w piątek był? –