C #: Hinzufügen von Arbeitstagen ab einem bestimmten Datum

9

Ich habe Probleme damit. Ich erstelle eine Methode, die Arbeitstage an einem bestimmten Datum hinzufügt. Zum Beispiel möchte ich 3 Arbeitstage bis zum 15. September 2010 (Mittwoch) hinzufügen, die Methode würde 20. September (Montag nächste Woche) zurückgeben. Es ignoriert Samstag und Sonntag, weil es nicht Arbeitstag ist ..

So etwas in C #:

%Vor%

Ich halte keine besonderen Feiertage für die Berechnungen, ich möchte einfach nur Tage hinzufügen außer Samstag und Sonntag .. Vielen Dank im Voraus! =)

    
CSharpNoob 15.09.2010, 12:58
quelle

6 Antworten

17

Wenn Sie keine Ferien in Erwägung ziehen müssen, würde ich vorschlagen, dass Sie so etwas tun:

%Vor%

Es ist ineffizient, aber leicht zu verstehen. Für eine effiziente Version würden Sie die Anzahl der vollständigen Wochen berechnen, die Sie hinzufügen möchten, aber dann eine Zuordnung von jedem "aktuellen Wochentag" und "verbleibenden Arbeitstagen" zu "Anzahl von tatsächlichen hinzuzufügende Tage ". Dann können Sie einfach die Gesamtzahl der hinzuzufügenden Tage berechnen und dies in einem einzigen Anruf erledigen.

EDIT: In Bezug auf das Niveau der Ineffizienz ... es ist wirklich nicht sehr schlecht. Es werden nur manuelle "is this a weekend" Checks für bis zu 4 Tage durchgeführt, was nicht zu schlecht ist. Insbesondere, trotz Igor's (aktuelle zum Zeitpunkt der Veröffentlichung) Ansprüche, ist es eher schneller als sein Ansatz, fehlerhafte Benchmarks trotz;)

Beachten Sie, dass es noch keine negativen Eingaben verarbeiten kann - ich habe das nicht überprüft.

Einer der Gründe für den von mir verwendeten Ansatz ist, dass er weder darauf angewiesen ist, dass ich oder der Codeleser wissen, was die Werte in DayOfWeek enum sind. Es ist mir egal, ob es 0-6, 1-7, Montag-Sonntag, Samstag-Freitag ... oder auch wenn es völlig bizarre Werte gibt. Ich vergleiche nur auf Gleichheit, was den Code "offensichtlich korrekt" macht.

    
Jon Skeet 15.09.2010, 13:04
quelle
1

Ein cooler Weg (ich denke) ist, dass in einer Erweiterungsmethode, wie:

%Vor%

so wird Ihr endgültiger Code aussehen:

%Vor%     
Leonardo Uzon Nowaczyk 15.09.2010 13:18
quelle
0

Hier ist, was Sie brauchen:

Aktualisiert:

%Vor%     
Manaf Abu.Rous 15.09.2010 13:05
quelle
0
%Vor%

HINZUGEFÜGT:

%Vor%     
garik 15.09.2010 13:10
quelle
0

Dies scheint mir der sauberste Weg zu sein:

%Vor%     
tocqueville 10.06.2016 11:31
quelle
-1

Ist ein alter Beitrag, aber jemand könnte an einer Erweiterung interessiert sein, die auch negative Tage behandelt. (Ich habe @Jon Antwort überarbeitet)

%Vor%     
Maurizio Pozzobon 02.12.2014 15:48
quelle

Tags und Links