For Schleife Tage zählen und Wochenenden automatisch überspringen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    For Schleife Tage zählen und Wochenenden automatisch überspringen

    Hallo,

    wahrscheinlich übersehe ich einen ganz einfachen Weg. Ich hab versucht in einer For Schleife eine gegebene Anzahl an Wochentage vorwärts zu zählen. Weswegen ich einfach die Tage zähle und bei Wochenenden den Counterstand hochsetzen wollte damit er weiter zählt, das geht leider nicht^^

    Quellcode

    1. For i = 0 To numberOfDays - 1
    2. Dim Tag = DateTime.Today.AddDays(i)
    3. If Not (Tag.DayOfWeek = DayOfWeek.Saturday OrElse Tag.DayOfWeek = DayOfWeek.Sunday) Then
    4. lstTage.Add(Tag)
    5. Else
    6. numberOfDays += 1 ....
    7. End If
    8. Next i


    Also ich krieg bei 23 Tagen jetzt nur 17 Einträge, denn die Wochenenden zählt er ja trotzdem, schreibt sie aber nicht rein.

    Viele Grüße
    @Haudruferzappeltnoch Du brauchst zwei Zähl-Variablen.
    Eine zählt die Schritte, die andere die Tage:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim numberOfDays = 30
    2. Dim i = 0
    3. Do While i < numberOfDays
    4. Dim Tag = DateTime.Today.AddDays(i)
    5. If Not (Tag.DayOfWeek = DayOfWeek.Saturday OrElse Tag.DayOfWeek = DayOfWeek.Sunday) Then
    6. lstTage.Items.Add(Tag)
    7. Else
    8. numberOfDays += 1
    9. End If
    10. i += 1
    11. Loop

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hey, falls es zufällig darum geht, alle Werktage zu zählen:

    Es muss irgendwo im VB.NET-Universum eine Funktion geben (weiß gerade den Namen nicht, aber ich glaube isBankHoliday()), die alle Feiertage zurückgibt. Leider alle US-amerikanischen. Für uns in D also sinnlos. Daher tust du alle Feiertage (auf dein Bundesland achten!) in eine List(of Date) und schreibst dir 2 Funktionen

    VB.NET-Quellcode

    1. Private Shared Function IsWeekend(ByVal myDate As Date) As Boolean
    2. Return myDate.DayOfWeek <> 1 AndAlso myDate.DayOfWeek <> 2 AndAlso myDate.DayOfWeek <> 3 AndAlso myDate.DayOfWeek <> 4 AndAlso myDate.DayOfWeek <> 5
    3. End Function
    4. Private Function IsHoliday(ByVal myDate As Date) As Boolean
    5. Return HolidayList2.Contains(myDate)
    6. End Function


    Um die Feiertage vorher zu kreieren, musst dir dir eine Funktion bauen, die dir das Oster- und Pfingstdatum berechnet.
    @Bartosz: Deine IsWeekend-Funktion geht aber auch ein wenig kürzer, wenn Du schreibst, wann Wochenende ist, und nicht, wann nicht. Also z.B.:

    VB.NET-Quellcode

    1. Private Shared Function IsWeekend(DateToCheck As Date) As Boolean
    2. Return DateToCheck.DayOfWeek = DayOfWeek.Saturday OrElse DateToCheck.DayOfWeek = DayOfWeek.Sunday
    3. End Function
    Und Feiertage können komisch sein. Erstens sind bekanntlich einige beweglich (dafür gibt es z.B. die ca. 150 Jahre alte Formel nach Spencer, die zwar funktioniert, aber ich kann mir bis heute nicht erklären, warum) und zum anderen hat z.B. Augsburg einen eigenen Feiertag (08.08.)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Erstens sind bekanntlich einige beweglich
    Hier irrst Du.
    Der 1. Mai ist ein beweglicher Feiertag, Ostersonntag ist der fixeste aller Feiertage überhaupt.
    Alle fixen Feiertage richten sich nach dem ersten Vollmond im Frühling.
    Allerdings ist das in der heutigen Feiertags-Gesetzgebung nicht bekannt. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: Hab ich ne Redefinition von beweglichen Feiertagen verpasst? Fixe Feiertage sind datumsfixiert. Genau das trifft auf die beweglichen nicht zu.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Das ist offensichtlich eine neue Definition.
    Ursprünglich (seit ca. seit 1600 Jahren) war Ostern das Fixum.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!