| |
|
|
Michael Wodrich | [size=18:9a05d71d8c]Kalender-Berechnungen:[/size:9a05d71d8c] (geschrieben in XProfan; muß evtl. ein wenig angepaßt werden für frühere Versionen)
Es gibt sicherlich viele Möglichkeiten für die Verwaltung von Kalenderdaten. Hier werden einige Routinen vorgestellt, die eine LongInt-Variable zur Speicherung benutzen.
Das dies möglich ist zeige ich hier:
2147483647 maximaler positiver LongInt-Wert ..CCYYMMDD das Datum wird so gespeichert ..hhmmsscc die Zeit wird so gespeichert
CC...... die Jahrhundert-Angabe (Century) ..YY.... das Jahr ....MM.. der Monat ......DD der Tag
hh...... die Stunde ..mm.... die Minute ....ss.. die Sekunde ......cc die Hundertstel-Sekunde (Centi)
Die Profan-internen Datum- und Zeitfunktionen können hiermit gut ergänzt werden.
Die folgenden Routinen bauen Datum und Zeit zusammen: KompilierenMarkierenSeparierenSyntax: KompilierenMarkierenSeparierenDatum& = MakeFullDate(Tag&,Monat&,Jahr&) z.B.: dat& = MakeFullDate(4,6,2004)
Datum& = MakeDate(Tag&,Monat&,Jahrhundert&,Jahr&) z.B.: dat& = MakeDate(4,6,20,04)
Zeit& = MakeTime(Stunde&,Minute&,Sekunde&,Hundertstel&) z.B.: tim& = MakeTime(23,30,0,40)
Zerlegen des Datums in seine Einzelteile (Parameter ist das LongInt-Datum): KompilierenMarkierenSeparierenZerlegen der Zeit in ihre Einzelteile (Parameter ist der LongInt-Wert): KompilierenMarkierenSeparierenDatum- und Zeit-Vergleiche: (d1 - Datum des 1. Wertes) (t1 - Zeit des 1. Wertes) (d2 - Datum des 2. Wertes) (t2 - Zeit des 2. Wertes) KompilierenMarkierenSeparierenDef Time_EQ(d1,t1,d2,t2) (@&(1) = @&(3)) and (@&(2) = @&(4))
Def Time_GE(d1,t1,d2,t2) (@&(1) > @&(3)) or ((@&(1) = @&(3)) and (@&(2) >= @&(4)))
Def Time_GT(d1,t1,d2,t2) (@&(1) > @&(3)) or ((@&(1) = @&(3)) and (@&(2) > @&(4)))
Def Time_LE(d1,t1,d2,t2) (@&(1) < @&(3)) or ((@&(1) = @&(3)) and (@&(2) <= @&(4)))
Def Time_LT(d1,t1,d2,t2) (@&(1) < @&(3)) or ((@&(1) = @&(3)) and (@&(2) < @&(4)))
Def Time_NEQ(d1,t1,d2,t2) (@&(1) <> @&(3)) or (@&(2) <> @&(4))
Das aktuelle Datum serviert Profan schon mundgerecht: KompilierenMarkierenSeparierenBei der aktuellen Zeit muß man schon ein wenig mehr nachhelfen: KompilierenMarkierenSeparierenIst das angegebene Jahr ein Schaltjahr? Es werden auch Jahre vor der Kalenderreform korrekt geprüft: KompilierenMarkierenSeparierenErmittelt den Wochentag: KompilierenMarkierenSeparieren MfG Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 05.06.2004 ▲ |
|
|
|
|
| Spitze!, wir kriege ich nach dem Prinzip eine Datums-Distance hin, welche die Anzahl der Jahre,Monate,Tage zwischen zwei Datumsangaben zurückliefert? |
|
|
| |
|
|
|
Michael Wodrich | durch Umrechnung in die Julianische Tageszahl. Die ist eigentlich eine Float-Zahl. Ich wollte das Ganze in LongInt behalten, aber da ist der Wurm drin. Mal sehen, ich poste das Ding am Nachmittag mal. Jetzt hab ich leider keine Streichhölzer mehr, um die Augen aufzuhalten...
bis dann Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 07.06.2004 ▲ |
|
|
|
|
Sven Bader | Ich will eigentlich auch nur die Distanz zweiter Daten Vielleicht ist das für jemanden interessant, die Anzahl der Tage eines Monats, Schaltjahrprüfung für Februar ist auch dabei.
Def Tage(2) int(28+val(mid$(303232332323,&(1),1))+if((&(1)=2) & (&(2) MOD 4 = 0),1,0))
Aufruf: print Tage(02,2004) Ausgabe: 29 Februar 2004 hatte 29 Tage |
|
|
| |
|
|