Italia
Fonte/ Codesnippets

Datumsrechnungen

 

KompilierenMarkierenSeparieren
Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Datumsrechnungen
goto weiter      diese Anweisung erlaubt die Ausführung dieses Testprogramms
Testprogramm und Beschreibung der Prozedur InfDatum
in der Includedatei InfDatum.Inc
Version 2.5  07.03.2005.     Die Prozedur kann frei benutzt werden, für
Schäden kann keine Haftung übernommen werden.
Autor: Gerhard Putschalka
email: g.putschalka@web.de
homepage: http://members.telering.at/g.putschalka/index.html
Die Prozedur Get_erweitertes_Datum erwartet die Eingabe eines Datums in der Form als
Tag + Monat + Jahr oder Tag im Jahr + Jahr (dabei als Monat 0 eingeben!).
Ein Datum ist erst ab 1. Jänner 1601 gültig.
Die Prozedur prüft das Datum auf Gültigkeit und gibt folgende Informationen zurück:
- Tag im Monat
- Monat
- Jahr
- Wochentag (als Nummer. 0 = Sonntag, ... 6 = Samstag)
- Tag im Jahr
- Anzahl Tage im Jahr (365 oder 366 bei einem Schaltjahr)
- Datum des ersten Tages der Kalenderwoche 1 (TTMMJJJJ)
- Datum Palmsonntag (TTMMJJJJ) (ist Basis zu den beweglichen kirchl. Feiertagen)
Der Returncode (@&(0)) der Prozedur sagt aus ob das Datum ungültig ( = 0) oder
gültig ( = 1) ist.
Der Palmsonntag bestimmt alle weiteren beweglichen katholischen Feiertage:
Palmsonntag         = das ermittelte Datum
Ostersonntag        = Palmsonntag +  7 Tage
Ostermontag         = Palmsonntag +  8 Tag
Christi Himmelfahrt = Palmsonntag + 46 Tage
Pfingstsonntag      = Palmsonntag + 56 Tage
Pfingstmontag       = Palmsonntag + 57 Tage
Fronleichnam        = Palmsonntag + 67 Tage
(kann einfach bestimmt werden: Aufruf der Prozedur mit irgendeinem Datum im Jahr, danach
wieder aufrufen mit dem Datum des Palmsonntags, addieren des obigen Wertes zum Julianischen
Tag des Palmsonntags und wiederaufrufen mit Übergabe des neuen Julianischen Tages und mit
Monat 0).
---------
Mit der PROZEDUR werden zwei Bereichsvariablen Q_Datum# und Q_FileTime# global deklariert.
Diese sind im PROGRAMM mit DIM Q_Datum#,34 undDim Q_FileTime#,10 zu dimensionieren und
vor dem Programmende mit Dispose Q_Datum# und Dispose Q_FileTime# wieder freizugeben.
Vor dem Aufruf von InfDatum muß die Bereichsvariable gefüllt werden (die hier
angeführten Variablen sind namentlich frei wählbar - ausgenommen Q_Datum#):
Bei Eingabe von Tag, Monat Jahr:
WORD Q_Datum#,0  = Jahr&
WORD Q_Datum#,2  = Monat&
WORD Q_Datum#,6  = Tag&
WORD Q_Datum#,18 = Anzahl Tage zu addieren oder zu subtrahieren, oder 0   *)
- oder bei Eingabe von Jahr und Tag im Jahr (Julianisches Datum)
WORD Q_Datum#,0 = Jahr&
WORD Q_Datum#,2 = 0
WORD Q_Datum#,6 = Tag&   Tag im Jahr (Julianisches Datum)
WORD Q_Datum#,18 = AnzTage& normal 0, Wert wenn Anzahl Tage zum eingegebenen Datum zu
addieren oder subtrahieren (Wert negativ angeben) sind
*) für Q_Datum#,18 (Anzahl Tage) ist der Wert immer positiv einzugeben. Sollen die Tage
subtrahiert werden ist bei @Byte(Q_Datum#,20) ein Minuszeichen (Bindestrich) einzu-
geben (Char Q_Datum#,20 = -  für Addieren: Char Q_Datum#,20 =
Die Prozedur füllt die Bereichsvariable (wenn Returncode = 1): Und die Werte sind:
Jahr&    = @Word(Q_Datum#,0)      Jahr
Monat&   = @Word(Q_Datum#,2)      Monat
DWeek&   = @Word(Q_Datum#,4)      Tag der Woche (0 = Sonntag, 1 = Montag,  u.s.w.)
Tag&     = @Word(Q_Datum#,6)      Tag im Monat
KaWoch&  = @Word(Q_Datum#,8)      Kalenderwoche des eingegeben Tages
Tagnum&  = @Word(Q_Datum#,16)     Tag im Jahr
ATage&   = @Word(Q_Datum#,18)     Anzahl Tage zu addieren oder subtrahieren
Minus$   = @Byte(Q_Datum#,20)     Vorzeichen für Tage zu subtrahieren (leer oder - )
ErstTg&  = @Word(Q_Datum#,21)     1. Tag der 1. Kalenderwoche
ErstMt&  = @Word(Q_Datum#,23)        Monat der 1. Kalenderwoche
ErstJr&  = @Word(Q_Datum#,25)        Jahr der 1. Kalenderwoche
PalmTg&  = @Word(Q_Datum#,27)     Tag   Palmsonntag
PalmMt   = @Word(Q_Datum#,29)     Monat Palmsonntag
AnzTge&  = @Word(Q_Datum#,31)     Anzahl Tage im Jahr (normal = 365, Schaltjahr = 366)
ACHTUNG: es werden 2 Bereichsvariablen Q_Datum# und Q_FileTime# verwendet. Diese
sind in der Includedatei InfDatum.inc declariert, müssen aber im Programm
dimensioniert werden! (DIM Q_Datum,32 und DIM Q_FileTime,10)
======================================================================
weiter:
====
Testprogramm
====
 $I InfDatum.inc
Declare Tag&,Monat&,Jahr&,WTag&,DWeek&,Retrn&,WoTag$,Datum$,TagNum&,Tage&,AddTage&,Anzahl$
Let WoTag$ = Sonntag;Montag;Dienstag;Mittwoch;Donnerstag;Freitag;Samstag
-----------
Datumseingabe verlangen (TTMMJJJJ oder TTT00JJJJ) immer führende Nullen !
Let Datum$ = @Input$(Datum eingeben (TTMMJJJJ oder TT00JJJJ) ,,)

If (Len(Datum$) < 8) or (Len(Datum$) > 9)

    @MessageBox(kein Datum oder das Datum wurde in ungültiger Länge eingegeben,Datum$,32)

Else

    If (@Len(Datum$) = 8)    im Format Tag, Monat und Jahr

        Let Tag&   = @Val(@Mid$(Datum$,1,2))
        Let Monat& = @Val(@Mid$(Datum$,3,2))
        Let Jahr&  = @Val(@Mid$(Datum$,5,4))
        Else                     oder im Format Tag und Jahr
        Let Tag&   = @Val(@Mid$(Datum$,1,3))
        Let Monat& = @Val(@Mid$(Datum$,4,2))
        Let Jahr&  = @Val(@Mid$(Datum$,6,4))

    EndIf

    --------------------
    Dim Q_Datum#,40
    Dim Q_FileTime#,10
    Clear Q_Datum#
    Zuordnen Tag, Monat und Jahr - oder Tag (im Jahr) mit Monat 0 und Jahr
    WORD Q_Datum#,0  = Jahr&
    WORD Q_Datum#,2  = Monat&
    WORD Q_Datum#,6  = Tag&
    WORD Q_Datum#,18 = 0
    Let Anzahl$ = @Trim$(@Input$(z.B. 0, oder 5 oder -5),Anzahl Tage hinzufügen,))
    Case (Anzahl$ = ) : Anzahl$ = 0
    Print Eingegeben wurde: +Datum$+, Anzahl Tage +Anzahl$
    Print
    Minuszeichen aus Anzahl$ entfernen und nach Q_Datum#,20 übertragen

    If (@Instr(-,Anzahl$))

        Char Q_Datum#,20 = -
        Anzahl$= @Translate$(Anzahl$,-,)

    EndIf

    Word Q_Datum#,18 = @Val(Anzahl$)
    InfDatum  Aufruf der Prozedur, konvertiere Datum
    Let Retrn& = @&(0)

    If Retrn&

        auswerten der Daten
        Let Jahr&      = @Word(Q_Datum#,0)      Jahr
        Let Monat&     = @Word(Q_Datum#,2)      Monat
        Let DWeek&     = @Word(Q_Datum#,4)      Tag der Woche (0 = Sonntag, 1 = Montag u.s.w.)
        Let Tag&       = @Word(Q_Datum#,6)      Tag im Monat
        Let Tagnum&    = @Word(Q_Datum#,16)     Tag im Jahr
        Let Tage&      = @Word(Q_Datum#,31)     Anzahl Tage im Jahr (normal = 365, Schaltjahr = 366)
        Let WoTag$ = @Substr$(WoTag$,(DWeek& + 1),;)  übersetze Wochentag
        Print Ergebnis:
        Print
        Print WoTag$,Tag&;.;Monat&;.;Jahr&;, der,TagNum&;. Tag im Jahr. Das Jahr hat,Tage&,Tage
        Print
        Print    der Tag liegt in der Kalenderwoche ,@Word(Q_Datum#,8);/;@Word(Q_Datum#,0)
        Print
        Let Tag&   = @Word(Q_Datum#,21)     1. Tag in 1. Kalenderwoche
        Let Monat& = @Word(Q_Datum#,23)        Monat
        Let Jahr&  = @Word(Q_Datum#,25)        Jahr
        Print    die Kalenderwoche 1 beginnt mit dem,Tag&;.;Monat&;.;Jahr&
        Print
        Let Tag&   = @Word(Q_Datum#,27)     Tag Palmsonntag
        Let Monat& = @Word(Q_Datum#,29)     Monat Palmsonntag
        Let Jahr&  = @Word(Q_Datum#,0)      Jahr Palmsonntag
        Print    der Palmsonntag ist am,Tag&;.;Monat&;.;Jahr&
        Print
        als Beispiel den Ostersonntag errechnen:
        setze Datum des Palmsonntags als Tag und Monat (Das Jahr kann nur das selbe sein)
        setze 7 als zu addierende Tage, lösche ein eventuelles Minuszeichen.
        WORD Q_Datum#,2  = @Word(Q_Datum#,29)     Monat Palmsonntag
        WORD Q_Datum#,6  = @Word(Q_Datum#,27)     Tag Palmsonntag
        Word Q_Datum#,18 = 7
        Char Q_Datum#,20 =
        InfDatum  Aufruf der Prozedur, konvertiere Datum
        Let Jahr&      = @Word(Q_Datum#,0)      Jahr
        Let Monat&     = @Word(Q_Datum#,2)      Monat
        Let Tag&       = @Word(Q_Datum#,6)      Tag im Monat
        Print    der Ostersonntag ist am,Tag&;.;Monat&;.;Jahr&
        Print

    Else

        Print Datum ist ungültig

    EndIf

    Print
    Print    beenden mit linker Maustaste oder mit der Entertaste
    waitinput
    Dispose Q_FileTime#
    Dispose Q_Datum#

EndIf

End
 
15.07.2007  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

869 Views

Untitledvor 0 min.
H.Brill09.10.2021
Torben Nissen01.07.2021
Walter23.10.2019
Langer04.04.2017
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

unbekannt (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie