36 Stimmen

Hinzufügen von Tagen zu einem Datum, aber Ausschluss von Wochenenden

Wie kann ich zu einem Datum eine Anzahl von Tagen hinzufügen, aber die Wochenenden ausschließen? Wenn ich zum Beispiel den 12.11.2008 (Mittwoch) eingebe und fünf addiere, ergibt das den 19.11.2008 (Mittwoch) und nicht den 17.11.2008 (Montag).

Ich kann mir eine einfache Lösung vorstellen, wie das Durchlaufen einer Schleife für jeden hinzuzufügenden Tag und das Überprüfen, ob es ein Wochenende ist, aber ich würde gerne sehen, ob es etwas Eleganteres gibt. Ich würde auch in jeder F#-Lösung interessiert sein.

0 Stimmen

Werden Sie eine kleine Anzahl von Tagen oder Millionen von Tagen hinzufügen?

10 Stimmen

Ich will Ihnen nur sagen: Sobald Sie ihnen sagen, dass es kein Problem ist, die Wochenenden auszuschließen, werden sie auch Urlaub machen wollen. Denken Sie darüber nach, bevor Sie etwas einführen.

0 Stimmen

Es gibt eine Bibliothek auf NuGet namens TimePeriodLibrary.NET von Jani Giannoudis, die eine enorme Menge an Funktionalität für diese Art von Berechnungen bietet. Wenn sie später auch Feiertage haben wollen, wird es einfach sein.

0voto

Dominiq Punkte 1
DateTime oDate2 = DateTime.Now;

int days = 8;

for(int i = 1; i <= days; i++)
{
  if (oDate.DayOfWeek == DayOfWeek.Saturday) 
  {
    oDate = oDate.AddDays(2);
  }
  if (oDate.DayOfWeek == DayOfWeek.Sunday) 
  {
    oDate = oDate.AddDays(1);
  }
  oDate = oDate.AddDays(1);
}

-2voto

gnud Punkte 75549

Ausgehend von der Nummer des ursprünglichen Tages im Jahr D und des ursprünglichen Tages in der Woche W sowie der Anzahl der zu addierenden Arbeitstage N ergibt sich die nächste Wochentagsnummer

W + N % 5.

Der nächste Tag im Jahr (ohne Rundumcheck) ist

D + ((N / 5) * 7) + N % 5).

Dies setzt voraus, dass Sie über eine ganzzahlige Division verfügen.

-2voto

Die Formel wird sein: Arbeitstag(Datum,Anzahl der Tage,(Wochentag(1)))

Versuchen Sie dies. Das wird helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X