Wochentag- Feiertagsermittlung

  • Hallo,
    das hier waren meine ersten Gehversuche mit AutoIt. Ermittlung eines beliebigen Wochentages mit der Formel von Christian Zeller und Berechnung (fast) aller Feiertage (fix und variabel) Deutschlands.
    Ich bin absolut begeistert von den Möglichkeiten, die diese Scriptsprache bietet. Das folgende Prog hab ich vergleichsweise auch mal in VB geschrieben. Die fertige EXE mit allen notwendigen Bibliotheken bringt es auf runde 5 MB! Das gleiche Ergebnis mit AutoIt ca. 130 kB!! - Und keine Installation notwendig.


    Edit 13.12.2009:
    Ich habe die Funktion _Feiertage() (aus Post #4) erweitert um den Gültigkeitsbereich. Bundeseinheitliche Gesetzliche Feiertage sind mit BG markiert, regional unterschiedliche gesetzliche Feiertage mit den ISO-Kürzeln der jeweiligen Bundesländer (BB, BE, BY...).
    Die Daten können jetzt wahlweise gegliedert nach fixen und variablen Feiertagen (innerhalb sortiert) oder alle Feiertage gemeinsam sortiert ausgegeben werden.


    Edit 18.04.2009:
    Fehler bei falscher Datumswahl (31.06. etc.) gefixt


    Edit 17.04.2009:
    Nach langer Zeit habe ich mich mal rangesetzt und dieses Erstlingswerk von mir mal auf einen aktuellen Stand gebracht, sowohl von der AutoIt-Version her, als auch programmiertechnisch (schön geschrumpft).


    Edit 17.12.2012:
    Da es thematisch hierher passt, folgende Funktion zusätzlich: _DateToNameWeekDayGER( )
    Es wird der deutsche Wochentagsname in Lang- oder Kurzform für ein bestimmtes Datum zurückgegeben.



    Und hier nun das Ergebnis:



  • Hab noch alles da.
    Hier in voller Schönheit die GUI:


    Und hier noch die reine Feiertagsfunktion. Evtl. kann man hinter dem Feiertagsnamen das Bundeslandkürzel anhängen, sofern es kein allgemeingültiger Feiertag ist.



    Edit 18.04.2009 Die überarbeitete Version findet ihr in Post 1.

  • Was hat es mit den Jahren 1583 und 8201 auf sich?


    Das sind die Jahresgrenzen für die eine Ermittlung von Schaltjahren gesichert ist.
    Seit 1583 gilt der Gregorianische Kalender mit der aktuellen Schalttagesregelung.
    Es verbleibt jedoch immer noch eine Differenz, die sich bis zum Jahr 8201 summieren wird. Es ist heute noch nicht geregelt, wie dann damit umgegangen werden soll (z.B. einmalig 2 Schalttage?).
    Laß uns dann noch mal drüber reden :rofl:

  • Hallo BugFix ,


    deine neue Version gibt die Feiertage, die von Ostern ahängig sind manchmal (bis jetzt nur für vergangene Jahrhunderte aufgefallen) mit falschem Datum aus, z. 400 Jahre zuviel im Jahr 1600, 500 für 1596), ist sicher nur eine Kleinigkeit, aber den Bug solltest du fixen.


    Edit1: Wenn ich so abändere #cs If $year < 1900 Then ; Datumsoperationen nur mgl. wenn > 1900 , Jahr wird konvertiert
    $RestJahr = Mod($year, 100)
    If _DateIsLeapYear($year) Then
    If $RestJahr < 10 Then
    $RestJahr = "0" & $RestJahr
    EndIf
    $Tempyear = 20 & $RestJahr
    Else
    If $RestJahr < 10 Then
    $RestJahr = "0" & $RestJahr
    EndIf
    $Tempyear = 19 & $RestJahr
    EndIf
    $EasterDate = $Tempyear & "/" & $EasterMonth & "/" & $EasterDay
    Else #ce
    $EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay
    ;EndIf
    läufts, zumindest für alle Jahre größer 999 fällt mir dann kein Fehler mehr auf
    mfg (Auto)Bert

  • BugFix, bei Deiner alten Version stand bei den unveränderlichen Feiertagen immer der jeweilige Wochentag dabei. Das fand ich ganz praktisch!


    Ansonsten aber ein schönes Script! :thumbsup:


    Edit: Genaugenommen wäre es ganz gut, wenn bei allen Feiertagen der jeweilige Wochentag mit dabei stehen würde. :)

  • Die Eingabe des Datums ist zwar etwas unkonventionell, aber eigentlich ganz cool, weil man das Jahr einfach verändern kann.


    Allerdings hat sich dort ein Bug eingeschlichen, denn in einem Schaltjahr kann ich den 29. Februar nicht auswählen ("Tag für Berechnung auf 28 korrigiert!") und in einem "normalen" Jahr kann ich den 29. Februar auswählen, erhalte aber als Wochentag eine "0" und die Meldung: "Tag für Berechnung auf 29 korrigiert!".

  • Kann man da nicht eine If/Then Abfarge machen?


    Ist 29 & Feb. & Wochentagausgabe = 0 Dann nachfolgende Tage plus 1.


    Werde mir mal das aktuelle Script und später dann das neue Script nehmen und schauen was gefixt wurde. ;-) Lerneffekt gleich mal ausnutzen !!!

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Allerdings hat sich dort ein Bug eingeschlichen, denn in einem Schaltjahr kann ich den 29. Februar nicht auswählen ("Tag für Berechnung auf 28 korrigiert!") und in einem "normalen" Jahr kann ich den 29. Februar auswählen, erhalte aber als Wochentag eine "0" und die Meldung: "Tag für Berechnung auf 29 korrigiert!".


    Stimmt, habe die Abfrage abgeändert. Werde ich gleich mal korrigieren. Danke für den Hinweis.

  • Hab' mir das Script gerade mal angesehen. Stimmt, wenn man in der Funktion _WTag() bei der If-Anweisung:
    If _DateIsLeapYear(GUICtrlRead($InYear)) Then
    ein Not einfügt,
    If Not _DateIsLeapYear(GUICtrlRead($InYear)) Then
    funktioniert alles! :thumbup:


    Edit: Die übergeordnete If-Anweisung solltest Du auch noch etwas korrigieren, damit die Meldung "Tag für Berechnung auf 29 korrigiert!", obwohl man den 29. angeklickt hat, verschwindet:

    If $mon = 2 and $day > (28 + _DateIsLeapYear(GUICtrlRead($InYear))) Then
    If Not _DateIsLeapYear(GUICtrlRead($InYear)) Then
    $day = 28
    GUICtrlSetState($aRadioT[27],$gui_checked)
    Else
    $day = 29
    GUICtrlSetState($aRadioT[28],$gui_checked)
    EndIf
    GUICtrlSetData($MsgTag,"'Tag' für Berechnung auf "& $day & " korrigiert!")
    EndIf

  • Die Funktion _Feiertage() habe ich erweitert. Es wird zusätzlich der Gültigkeitsbereich ausgegeben (BG = Bundesweit Gesetzlich; ISO-Kürzel BB, BE, BY... für Regionale Gesetzliche Feiertage).
    Die Daten können jetzt wahlweise gegliedert nach fixen und variablen Feiertagen (innerhalb sortiert) oder alle Feiertage gemeinsam sortiert ausgegeben werden.
    s. Post #1