Ankündigung

Einklappen
Keine Ankündigung bisher.

Kalenderberechnungen ( Osterformel )

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #31
    Zitat von enertegus Beitrag anzeigen
    Was spricht gegen:
    [highlight=epc]
    s=Wert*convert(pow(2f32,convert(Shifter),0f32),0u6 4)
    [/highlight]
    Wenn es denn korrekt funktioniert spricht dagegen nur noch der unnötig hohe Rechenaufwand verglichen mit einem nativ implementierten Shift - ob das im praktischen Betrieb spürbar wird, kann ich aber nicht abschätzen.
    Es stellt sich mir momentan halt noch die Frage, ob der von pow() gelieferte f32-Wert auch für alle in Frage kommenden Exponenten (0..63) ein hinreichend genaues Ergebnis liefert, das nach Konvertierung in ein u64 auch noch genau das Bitmuster ergibt, das es theoretisch ergeben muss. Hat das schon jemand mal prüfen können?

    Zitat von enertegus Beitrag anzeigen
    und dann halt schick verpacken z.b. in ein Makro
    ShiftLinks(Wert,Shifter)
    usw..
    Klar, das ist dann die Kür und dann auch sicher kein wirkliches Problem mehr.
    Tessi

    Kommentar


      #32
      Zitat von Tessi Beitrag anzeigen
      Es stellt sich mir momentan halt noch die Frage, ob der von pow() gelieferte f32-Wert auch für alle in Frage kommenden Exponenten (0..63) ein hinreichend genaues Ergebnis liefert, das nach Konvertierung in ein u64 auch noch genau das Bitmuster ergibt, das es theoretisch ergeben muss.
      Wenn Du einen 32 Bit Rechner hast, kannst Du da ausprobieren. Ich wage die Behauptung, das wird stimmen.
      Nicht verwechseln f16: Ungenau und zum Rechnen kaum geeignet, f32: wie bei jedem "normalen" 32 Bit PC.
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar


        #33
        Hallo,

        wollte mich noch abschliessend melden - habe das ganze jetzt fertig:

        [highlight=epc]
        //************************************************** *************************
        //* WE_Ostertag
        //************************************************** *************************
        //* Bestimmung des Ostersonntag => Berechnung der bewegl. Feiertage
        //* moeglich
        //* Jahr muss 4-Stellig vorliegen und als s32 definiert sein !!
        //************************************************** *************************


        :begin WE_Ostertag ( jahr, ostern )

        :var dd@
        :var cc@
        :var jj@
        :var ee@

        dd@ = MOD( MOD(jj@,19s32) * 19s32 + 24s32, 30s32);
        if dd@ > 27s32 then dd@ = dd@ -1s32 endif;

        ee@ = convert(FLOOR( convert(jj@, 1f16 ) *5f16/4f16),1s32 )+ dd@ + 1s32;
        cc@ = MOD( ee@, 7s32 );
        ostern^Tag = 28s32 + dd@ - cc@; /* Ostertag */;

        if ostern^Tag <= 31s32 then ostern^Mon = 3s32 endif

        if ostern^Tag > 31s32 then { /* Ostern im April */;
        ostern^Tag = ostern^Tag - 31s32;
        ostern^Mon = 4s32
        } endif

        :return convert( ostern^Tag, $$ ) + $.$ + convert( ostern^Mon, $$ ) + $.$
        :end
        [/highlight]

        den daraus abgeleiteten Ostertag nehme ich dann und berechnen damit die
        Distanz in Tagen zum Jahr 1970 ( ähnlich Unixtime ) und davon abgeleitet die beweglichen Feiertage ...
        Zur Vereinfachung habe ich hierzu 2 Makro´s Datwert und Datwert2Date.

        Danke nochmals an alle - wer die restlichen Makros haben möchte => bitte PN

        Gruss Wolfgang
        FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
        ETS 6.2 EibPC V3.x

        Kommentar


          #34
          Hoi

          Ich versteh' den Code nicht. Die Eingangsvariablen "jahr" und "ostern" kommen im code scheinbar nicht vor?
          "jahr" ist mir klar, aber was ist "ostern"?
          Grüsse Bodo
          Fragen gehören ins Forum, und nicht in mein Postfach;
          EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

          Kommentar


            #35
            Hallo Bodo,

            die Variablen jahr und ostern sind Übergabevariablen und vorab gesetzt. Nachstehend der Aufruf im Programm. Die GA '3/0/8' trägt das aktuelle Kalenderjahr - über c_KalOster erhalte ich die Rueckgabe
            von Tag und Monat ...

            [highlight=epc]

            // Jahreswechsel => bewegliche Feiertage neu berechnen
            if change('3/0/8's32 ) or systemstart() then {

            c_KalJahr = '3/0/8's32; /* aktuelles Jahr, Übergabeparameter */;

            WE_Ostertag( c_KalJahr, c_KalOster ); /* Berechnung OsterTag */;

            /* AnzTage bis Ostern */;
            c_OsterDay = WE_Datwert( c_KalJahr, c_KalOsterMon, c_KalOsterTag );
            /* Berechnung der bewegl. feiertage */;
            c_AschermittwochDay = c_OsterDay - 46s32;
            c_FaschingsDay = c_AschermittwochDay - 1s32;
            c_OstermontagDay = c_OsterDay + 1s32;
            c_HimmelfahrtDay = c_OsterDay + 39s32;
            c_PfingstDay = c_OsterDay + 49s32;
            c_PfingstmontagDay = c_PfingstDay + 1s32;
            c_FronleichDay = c_OsterDay + 60s32;
            /* Bestimmung der DatumStrings */;
            WE_DatwertToDate( c_Ostern, c_OsterDay );
            WE_DatwertToDate( c_Ostermontag, c_OstermontagDay );
            WE_DatwertToDate( c_Aschermittwoch, c_AschermittwochDay );
            WE_DatwertToDate( c_Fasching, c_FaschingsDay );
            WE_DatwertToDate( c_Himmelfahrt, c_HimmelfahrtDay );
            WE_DatwertToDate( c_Pfingsten, c_PfingstDay );
            WE_DatwertToDate( c_Pfingstmontag, c_PfingstmontagDay );
            WE_DatwertToDate( c_Fronleich, c_FronleichDay )

            } endif

            [/highlight]

            Mir ist klar, fuer die Übergabe und Rueckgabe der Werte gibt es viele Wege ;-)
            Ich wollte hier im Kern den geprüften und funktionierenden Code fuer die Osterberechnung zeigen ...
            FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
            ETS 6.2 EibPC V3.x

            Kommentar


              #36
              Hoi

              Und was ist / woher kommt "c_KalOster" ?
              Dann geb' ich schon ruh'.
              Grüsse Bodo
              Fragen gehören ins Forum, und nicht in mein Postfach;
              EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

              Kommentar


                #37
                Hallo Bodo,

                kein Problem: c_KalOster ergibt nur den Rueckgabewert und wird durch
                das Makro definiert. Ich kann somit zugreifen auf:
                c_KalOsterMon ( = Monat des Ostertages ) und c_KalOsterTag ( = Tag von Ostern ) zugreifen. Als Return erhalte ich auch noch einen String im Format DD.MM. den ich aktuell aber nicht verwende.

                Gruss

                FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
                ETS 6.2 EibPC V3.x

                Kommentar


                  #38
                  Hoi

                  Ah soo.
                  [highlight=epc]
                  :begin WE_Ostertag ( jahr, ostern )
                  [/highlight]bzw.
                  [highlight=epc]
                  c_KalJahr = '3/0/8's32; /* aktuelles Jahr, Übergabeparameter */;
                  WE_Ostertag( c_KalJahr, c_KalOster );
                  [/highlight]c_KalJahr wird an die "Funktion" übergeben und c_KalOster ist das Ergebnis.
                  Ich dachte es geht so:
                  ostern = WE_Ostertag (Jahr);
                  Grüsse Bodo
                  Fragen gehören ins Forum, und nicht in mein Postfach;
                  EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                  Kommentar


                    #39
                    Ich bin etwas verwirrt, könnte mir jemand bitte ein Beispiel geben, wie und wofür ihr es verwendet?

                    Lasst ihr euch den Feiertag in der Visu darstellen?

                    Um es zu verwenden, braucht man also das Makro und den Aufruf im EIBPC?

                    Makro
                    Code:
                    [LEFT][LIST=1][*][FONT=Courier New][COLOR=#0000ff]//***************************************************************************[/COLOR][/FONT][*][FONT=Courier New][COLOR=#0000ff]//*    WE_Ostertag[/COLOR][/FONT][*][FONT=Courier New][COLOR=#0000ff]//***************************************************************************[/COLOR][/FONT][*][FONT=Courier New][COLOR=#0000ff]//*    Bestimmung des Ostersonntag => Berechnung der bewegl. Feiertage[/COLOR][/FONT][*][FONT=Courier New][COLOR=#0000ff]//*    moeglich[/COLOR][/FONT][*][FONT=Courier New][COLOR=#0000ff]//*    Jahr muss 4-Stellig vorliegen und als s32 definiert sein !![/COLOR][/FONT][*][FONT=Courier New][COLOR=#0000ff]//***************************************************************************[/COLOR][/FONT][*][FONT=Courier New]:begin WE_Ostertag [COLOR=#000000]([/COLOR] jahr, ostern [COLOR=#000000])[/COLOR][/FONT][*][FONT=Courier New]:var dd@[/FONT][*][FONT=Courier New]:var cc@[/FONT][*][FONT=Courier New]:var jj@[/FONT][*][FONT=Courier New]:var ee@[/FONT][*][FONT=Courier New]dd@ = MOD[COLOR=#000000]([/COLOR] MOD[COLOR=#000000]([/COLOR]jj@,[COLOR=#0b610b]19s32[/COLOR][COLOR=#000000])[/COLOR] * [COLOR=#0b610b]19s32[/COLOR] + [COLOR=#0b610b]24s32[/COLOR], [COLOR=#0b610b]30s32[/COLOR][COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New][COLOR=#e63ec3]if[/COLOR] dd@ > [COLOR=#0b610b]27s32[/COLOR] [COLOR=#e63ec3]then[/COLOR] dd@ = dd@ -[COLOR=#0b610b]1s32[/COLOR] [COLOR=#e63ec3]endif[/COLOR];[/FONT][*][FONT=Courier New]ee@ = [COLOR=#e63ec3]convert[/COLOR][COLOR=#000000]([/COLOR]FLOOR[COLOR=#000000]([/COLOR] [COLOR=#e63ec3]convert[/COLOR][COLOR=#000000]([/COLOR]jj@, [COLOR=#0b610b]1f16[/COLOR] [COLOR=#000000])[/COLOR] *[COLOR=#0b610b]5f16[/COLOR]/[COLOR=#0b610b]4f16[/COLOR][COLOR=#000000])[/COLOR],[COLOR=#0b610b]1s32[/COLOR] [COLOR=#000000])[/COLOR]+ dd@ + [COLOR=#0b610b]1s32[/COLOR];[/FONT][*][FONT=Courier New]cc@ = MOD[COLOR=#000000]([/COLOR] ee@, [COLOR=#0b610b]7s32[/COLOR] [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]ostern^Tag = [COLOR=#0b610b]28s32[/COLOR] + dd@ - cc@;            /* Ostertag            */;[/FONT][*][FONT=Courier New][COLOR=#e63ec3]if[/COLOR] ostern^Tag <= [COLOR=#0b610b]31s32[/COLOR] [COLOR=#e63ec3]then[/COLOR] ostern^Mon = [COLOR=#0b610b]3s32[/COLOR] [COLOR=#e63ec3]endif[/COLOR][/FONT][*][FONT=Courier New][COLOR=#e63ec3]if[/COLOR] ostern^Tag > [COLOR=#0b610b]31s32[/COLOR] [COLOR=#e63ec3]then[/COLOR] [COLOR=#000000]{[/COLOR]            /* Ostern im April    */;[/FONT][*][FONT=Courier New]    ostern^Tag = ostern^Tag - [COLOR=#0b610b]31s32[/COLOR];[/FONT][*][FONT=Courier New]    ostern^Mon = [COLOR=#0b610b]4s32[/COLOR][/FONT][*][FONT=Courier New][COLOR=#000000]}[/COLOR] [COLOR=#e63ec3]endif[/COLOR][/FONT][*][FONT=Courier New]:return [COLOR=#e63ec3]convert[/COLOR][COLOR=#000000]([/COLOR] ostern^Tag, [COLOR=#8a0808]$$[/COLOR] [COLOR=#000000])[/COLOR] + [COLOR=#8a0808]$.$[/COLOR] + [COLOR=#e63ec3]convert[/COLOR][COLOR=#000000]([/COLOR] ostern^Mon, [COLOR=#8a0808]$$[/COLOR] [COLOR=#000000])[/COLOR] + [COLOR=#8a0808]$.$[/COLOR][/FONT][*][FONT=Courier New]:end [/FONT][/LIST]
                    
                    [/LEFT]
                    EIBPC
                    Code:
                    [LEFT][LIST=1][*][FONT=Courier New][COLOR=#0000ff]// Jahreswechsel => bewegliche Feiertage neu berechnen[/COLOR][/FONT][*][FONT=Courier New][COLOR=#e63ec3]if[/COLOR] [COLOR=#e63ec3]change[/COLOR][COLOR=#000000]([/COLOR]'[COLOR=#0b610b]3[/COLOR]/[COLOR=#0b610b]0[/COLOR]/[COLOR=#0b610b]8[/COLOR]'[COLOR=#0b610b]s32[/COLOR] [COLOR=#000000])[/COLOR] [COLOR=#e63ec3]or[/COLOR] [COLOR=#e63ec3]systemstart[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR] [COLOR=#e63ec3]then[/COLOR] [COLOR=#000000]{[/COLOR][/FONT][*][FONT=Courier New]    c_KalJahr = '[COLOR=#0b610b]3[/COLOR]/[COLOR=#0b610b]0[/COLOR]/[COLOR=#0b610b]8[/COLOR]'[COLOR=#0b610b]s32[/COLOR];    /* aktuelles Jahr, Übergabeparameter        */;[/FONT][*][FONT=Courier New]    WE_Ostertag[COLOR=#000000]([/COLOR] c_KalJahr, c_KalOster [COLOR=#000000])[/COLOR];    /* Berechnung OsterTag        */;[/FONT][*][FONT=Courier New]    /* AnzTage bis Ostern     */; [/FONT][*][FONT=Courier New]    c_OsterDay = WE_Datwert[COLOR=#000000]([/COLOR] c_KalJahr, c_KalOsterMon, c_KalOsterTag [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]    /* Berechnung der bewegl. feiertage    */;[/FONT][*][FONT=Courier New]    c_AschermittwochDay = c_OsterDay - [COLOR=#0b610b]46s32[/COLOR];[/FONT][*][FONT=Courier New]    c_FaschingsDay = c_AschermittwochDay - [COLOR=#0b610b]1s32[/COLOR];[/FONT][*][FONT=Courier New]    c_OstermontagDay = c_OsterDay + [COLOR=#0b610b]1s32[/COLOR];[/FONT][*][FONT=Courier New]    c_HimmelfahrtDay = c_OsterDay + [COLOR=#0b610b]39s32[/COLOR];[/FONT][*][FONT=Courier New]    c_PfingstDay = c_OsterDay + [COLOR=#0b610b]49s32[/COLOR];[/FONT][*][FONT=Courier New]    c_PfingstmontagDay = c_PfingstDay + [COLOR=#0b610b]1s32[/COLOR];[/FONT][*][FONT=Courier New]    c_FronleichDay = c_OsterDay + [COLOR=#0b610b]60s32[/COLOR];[/FONT][*][FONT=Courier New]    /* Bestimmung der DatumStrings    */;[/FONT][*][FONT=Courier New]    WE_DatwertToDate[COLOR=#000000]([/COLOR] c_Ostern, c_OsterDay [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]    WE_DatwertToDate[COLOR=#000000]([/COLOR] c_Ostermontag, c_OstermontagDay [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]    WE_DatwertToDate[COLOR=#000000]([/COLOR] c_Aschermittwoch, c_AschermittwochDay [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]    WE_DatwertToDate[COLOR=#000000]([/COLOR] c_Fasching, c_FaschingsDay [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]    WE_DatwertToDate[COLOR=#000000]([/COLOR] c_Himmelfahrt, c_HimmelfahrtDay [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]    WE_DatwertToDate[COLOR=#000000]([/COLOR] c_Pfingsten, c_PfingstDay [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]    WE_DatwertToDate[COLOR=#000000]([/COLOR] c_Pfingstmontag, c_PfingstmontagDay [COLOR=#000000])[/COLOR];[/FONT][*][FONT=Courier New]    WE_DatwertToDate[COLOR=#000000]([/COLOR] c_Fronleich, c_FronleichDay [COLOR=#000000])[/COLOR][/FONT][*][FONT=Courier New][COLOR=#000000]}[/COLOR] [COLOR=#e63ec3]endif[/COLOR] [/FONT][/LIST]
                    
                    [/LEFT]
                    Könnte mir hier Bitte jemand Klarheit schaffen!!??
                    MfG MrKnx

                    Kommentar


                      #40
                      Ich nütze es für das Öffnen der Jalousien morgens: werktags: 7:00 / Feiertags: 8:00

                      Gruss Wolfgang
                      ETS 6.2 EibPC V3.x

                      Kommentar


                        #41
                        Und wo bekommst du deine GA '3/0/8's32 im vierstelligen Jahresformat her?
                        MfG MrKnx

                        Kommentar


                          #42
                          Hallo,

                          das vierstellige Jahr hole ich mir an anderer Stelle über setdate():

                          [highlight=epc]

                          c_KalJahr = convert( split( convert(setdate(), $$), 6u16, 9u16 ), 1s32 );
                          write( '3/0/8's32, c_KalJahr );
                          [/highlight]

                          hoffe das ist soweit klar ;-)
                          FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
                          ETS 6.2 EibPC V3.x

                          Kommentar


                            #43
                            Irgendwie Blick ich nicht durch!

                            Der Makroaufruf sieht so aus:

                            Code:
                            WE_Ostertag(c_KalJahr,c_OsterDay)
                            bekomme immer eine Fehlermeldung

                            Code:
                             Syntaxfehler in Zeile:[604] 
                             >if change('3/0/8's32) or systemstart() then {    c_KalJahr = '3/0/8's32; /* aktuelles Jahr, Übergabeparameter */;    WE_Ostertag( c_KalJahr, c_KalOster ); /* Berechnung OsterTag */;    /* AnzTage bis Ostern */;    c_OsterDay = WE_Datwert( c_KalJahr, c_KalOsterMon, c_KalOsterTag );    /* Berechnung der bewegl. feiertage */;    c_AschermittwochDay = c_OsterDay - 46s32;    c_FaschingsDay = c_AschermittwochDay - 1s32;    c_OstermontagDay = c_OsterDay + 1s32;    c_HimmelfahrtDay = c_OsterDay + 39s32;    c_PfingstDay = c_OsterDay + 49s32;    c_PfingstmontagDay = c_PfingstDay + 1s32;    c_FronleichDay = c_OsterDay + 60s32;    /* Bestimmung der DatumStrings */;    WE_DatwertToDate( c_Ostern, c_OsterDay );    WE_DatwertToDate( c_Ostermontag, c_OstermontagDay );    WE_DatwertToDate( c_Aschermittwoch, c_AschermittwochDay );    WE_DatwertToDate( c_Fasching, c_FaschingsDay );    WE_DatwertToDate( c_Himmelfahrt, c_HimmelfahrtDay );    WE_DatwertToDate( c_Pfingsten, c_PfingstDay );    WE_DatwertToDate( c_Pfingstmontag, c_PfingstmontagDay );    WE_DatwertToDate( c_Fronleich, c_FronleichDay )} endif< in der Datei "C:/Users/Martin/Desktop/Eib-Pc NEU/EibstudioData/tmpApp.txt"
                              Funktion unbekannt in >we_datwert<  in >c_OsterDay=<  in >c_KalJahr='3/0/8's32--Set;Mak:we_ostertag==>convert(c_KalOsterTag,$$)+$.$+convert(c_KalOsterMon,$$)+$.$;;<  in >{<  in >if_then change('3/0/8's32) or systemstart()<
                            MfG MrKnx

                            Kommentar


                              #44
                              Da es mittlerweile schon fast ein Jahr her ist, wo ich an dem Versuch die Feiertage mit diesem Code zu berechnen, kläglich gescheitert bin, wollte ich jetzt einen erneuten Versuch starten!

                              BITTE helft mir dabei!!!

                              Makroaufruf
                              Code:
                              WE_Ostertag(c_KalJahr,c_OsterDay)
                              Makro
                              Code:
                              //***************************************************************************
                              
                              //*    WE_Ostertag
                              
                              //***************************************************************************
                              
                              //*    Bestimmung des Ostersonntag => Berechnung der bewegl. Feiertage
                              
                              //*    moeglich
                              
                              //*    Jahr muss 4-Stellig vorliegen und als s32 definiert sein !!
                              
                              //***************************************************************************
                              
                              :begin WE_Ostertag ( jahr, ostern )
                              
                              :var dd@
                              
                              :var cc@
                              
                              :var jj@
                              
                              :var ee@
                              
                              dd@ = MOD( MOD(jj@,19s32) * 19s32 + 24s32, 30s32);
                              
                              if dd@ > 27s32 then dd@ = dd@ -1s32 endif;
                              
                              ee@ = convert(FLOOR( convert(jj@, 1f16 ) *5f16/4f16),1s32 )+ dd@ + 1s32;
                              
                              cc@ = MOD( ee@, 7s32 );
                              
                              ostern^Tag = 28s32 + dd@ - cc@;            /* Ostertag            */;
                              
                              if ostern^Tag <= 31s32 then ostern^Mon = 3s32 endif
                              
                              if ostern^Tag > 31s32 then {            /* Ostern im April    */;
                              
                                  ostern^Tag = ostern^Tag - 31s32;
                              
                                  ostern^Mon = 4s32
                              
                              } endif
                              
                              :return convert( ostern^Tag, $$ ) + $.$ + convert( ostern^Mon, $$ ) + $.$
                              
                              :end
                              EIBPC
                              Code:
                              // Die vierstellige Jahreszahl in GA schreiben
                              
                              c_KalJahr = convert( split( convert(setdate(), $$), 6u16, 9u16 ), 1s32 );
                              write( '3/0/8's32, c_KalJahr ); 
                              
                              // Jahreswechsel => bewegliche Feiertage neu berechnen
                              
                              if change('3/0/8's32 ) or systemstart() then {
                              
                                  c_KalJahr = '3/0/8's32;    /* aktuelles Jahr, Übergabeparameter        */;
                              
                                  WE_Ostertag( c_KalJahr, c_KalOster );    /* Berechnung OsterTag        */;
                              
                                  /* AnzTage bis Ostern     */; 
                              
                                  c_OsterDay = WE_Datwert( c_KalJahr, c_KalOsterMon, c_KalOsterTag );
                              
                                  /* Berechnung der bewegl. feiertage    */;
                              
                                  c_AschermittwochDay = c_OsterDay - 46s32;
                              
                                  c_FaschingsDay = c_AschermittwochDay - 1s32;
                              
                                  c_OstermontagDay = c_OsterDay + 1s32;
                              
                                  c_HimmelfahrtDay = c_OsterDay + 39s32;
                              
                                  c_PfingstDay = c_OsterDay + 49s32;
                              
                                  c_PfingstmontagDay = c_PfingstDay + 1s32;
                              
                                  c_FronleichDay = c_OsterDay + 60s32;
                              
                                  /* Bestimmung der DatumStrings    */;
                              
                                  WE_DatwertToDate( c_Ostern, c_OsterDay );
                              
                                  WE_DatwertToDate( c_Ostermontag, c_OstermontagDay );
                              
                                  WE_DatwertToDate( c_Aschermittwoch, c_AschermittwochDay );
                              
                                  WE_DatwertToDate( c_Fasching, c_FaschingsDay );
                              
                                  WE_DatwertToDate( c_Himmelfahrt, c_HimmelfahrtDay );
                              
                                  WE_DatwertToDate( c_Pfingsten, c_PfingstDay );
                              
                                  WE_DatwertToDate( c_Pfingstmontag, c_PfingstmontagDay );
                              
                                  WE_DatwertToDate( c_Fronleich, c_FronleichDay )
                              
                              } endif

                              Was benötige ich noch um die Feiertage berechnen zu können!
                              Bekomme immer noch den Syntaxfehler

                              MfG MrKnx

                              Kommentar


                                #45
                                Habe hier noch zwei Makros, die zu der Berechnung anscheinend dazugehören, jedoch weis ich nicht, wie sie eingebunden werden sollen!!

                                Code:
                                //***************************************************************************
                                //*    WE_Datwert                         FUNKTIONSMAKRO
                                //***************************************************************************
                                //*    Bestimmung der Anzahl Tage seit 1970 
                                //* ( Basierend auf UnixTime von Bernd Meiners ( CodingWettbewerb ) )
                                //*  Jahr muss 4-Stellig sein !!
                                //***************************************************************************
                                
                                
                                :begin WE_Datwert( utY, utMo, utD)
                                :info $Gegebenen Zeitpunkt mit Einzelangabe von Jahr, Monat in Datwert ab 1970 umwandeln$ \\
                                    $Jahr$ \\
                                    $Monat$ \\
                                    $Tag$
                                	
                                :shortinfo $Gegebes Datum in Datwert umwandeln$
                                
                                :var c_DayToNextMonth@
                                :var c_DatWert@
                                :var c_Jahr@
                                :var c_Monat@
                                :var c_Tag@
                                :var c_DeltaJahr@
                                :var c_SJahrKorr@
                                :var c_AnzFloat@
                                
                                c_DayToNextMonth@ = 0s32
                                
                                c_Jahr@ = convert( utY, 0s32)
                                c_Monat@ = convert( utMo, 0s32)
                                c_Tag@ = convert( utD, 0s32)
                                
                                
                                if c_Monat@ == 1s32 then c_DayToNextMonth@ = 0s32 endif
                                if c_Monat@ == 2s32 then c_DayToNextMonth@ = 31s32 endif
                                if c_Monat@ == 3s32 then c_DayToNextMonth@ = 59s32 endif
                                if c_Monat@ == 4s32 then c_DayToNextMonth@ = 90s32 endif
                                if c_Monat@ == 5s32 then c_DayToNextMonth@ = 120s32 endif
                                if c_Monat@ == 6s32 then c_DayToNextMonth@ = 151s32 endif
                                if c_Monat@ == 7s32 then c_DayToNextMonth@ = 181s32 endif
                                if c_Monat@ == 8s32 then c_DayToNextMonth@ = 212s32 endif
                                if c_Monat@ == 9s32 then c_DayToNextMonth@ = 243s32 endif
                                if c_Monat@ == 10s32 then c_DayToNextMonth@ = 273s32 endif
                                if c_Monat@ == 11s32 then c_DayToNextMonth@ = 304s32 endif
                                if c_Monat@ == 12s32 then c_DayToNextMonth@ = 334s32 endif
                                
                                c_DeltaJahr@ = c_Jahr@ - 1970s32
                                
                                // Berechnung Schalttage seit 1970
                                c_SJahrKorr@ =(c_Jahr@-1s32 - 1968s32 ) / 4s32 - ((c_Jahr@ - 1s32) - 1900s32 ) / 100s32 + ((c_Jahr@ - 1s32) - 1600s32 ) / 400s32
                                
                                // Anzahl Tage seit 1970
                                c_DatWert@ = ( c_DayToNextMonth@ + c_Tag@ ) + (c_DeltaJahr@ * 365s32 + c_SJahrKorr@)
                                 
                                if ( (c_Monat@ > 2s32) AND (mod(c_Jahr@, 4s32) == 0s32 AND \\
                                		( mod( c_Jahr@, 100s32) != 0s32 or mod(c_Jahr@, 400s32)==0s32)) ) then {
                                    c_DatWert@ = c_DatWert@ + 1s32; /* +Schalttag wenn jahr Schaltjahr ist */
                                } endif
                                
                                :return c_DatWert@
                                :end
                                Code:
                                //***************************************************************************
                                //*    WE_IsFeiertag                  FUNKTIONSMAKRO
                                //***************************************************************************
                                //*    Pruefung, ob der aktuelle Tag ein Feiertag ist
                                //*    bei Wochenende wird vorrangig WOCHENENDE gesetzt
                                //*    => damit kann z.B. am Wochenende oder GESETZLICHEN FEIERTAGEN
                                //*	      ein anderes Schaltverhalten gesetzt werden ( z.B. Jalousien )
                                //***************************************************************************
                                //
                                //   	die Konstanten mit den fixen Feiertagen muessen vorab definiert sein
                                //		im Format DD.MM !!
                                
                                
                                :begin WE_IsFeiertag( datum )
                                :info $Flag über aktuellen Tag$
                                :shortinfo $Analyse, ob Feiertag ist$
                                
                                :var dd@
                                :var prev@
                                :var next@
                                :var flag@
                                
                                flag@ = $N$
                                
                                if dayofweek() == SAMSTAG then flag@ = $W$ endif
                                if dayofweek() == SONNTAG then flag@ = $W$ endif
                                if dayofweek() > SONNTAG and dayofweek() < SAMSTAG then flag@ = $N$ endif
                                
                                
                                dd@ = split(datum,0u16,4u16 )
                                
                                if c_AktAnzTage == c_OsterDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_OstermontagDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_HimmelfahrtDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_PfingstDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_PfingstmontagDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_FronleichDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_NeujahrDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_WeihnachtsDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_Weihnachts2Day then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_HlDreiKoenigeDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_ErsterMaiDay then flag@ = GESETZLICH endif
                                if c_AktAnzTage == c_StaatsfeiertagDay then flag@ = GESETZLICH endif
                                
                                // Feiertage die nicht gesetzlich sind
                                if c_AktAnzTage == c_FaschingsDay  then flag@ = FEIERTAG endif
                                if c_AktAnzTage == c_AschermittwochDay then flag@ = FEIERTAG endif
                                
                                :return flag@
                                :end
                                @Wetronic

                                Vielleicht könntest du hier Klarheit schaffen und mir helfen!
                                MfG MrKnx

                                Kommentar

                                Lädt...
                                X