[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
ADATUM.INT
{ ---------------------------------------------------------------- }
{ DATUM - Datumsoperationen }
{ ---------------------------------------------------------------- }
{ Es werden haupts.chlich folgende Prozeduren zur Verf.gung }
{ gestellt: }
{ Tage: Berechnet die Anzahl der Wochentage zwischen zwei Daten. }
{ WochenTag: Berechnet den Wochentag, auf den ein Datum f.llt. }
{ ExtrDatum: Extrahiert das Datum aus einer beinahe beliebigen }
{ Eingabeform. In der Abwandlung "ExtrDbDatum" wird aus den ge- }
{ wonnenen Daten ein String der L.nge 10 erzeugt, der dem von }
{ dBase-Dateien geforderten Format entspricht. }
{ PruefeDatum: .berpr.ft, ob das .bergebene Datum korrekt ist und }
{ innerhalb der angegebenen Grenzen liegt. }
{ DGroesser, DKleiner, DGleich ...: Vergleich von Daten. (F.r In- }
{ formatiker mit Rechtschreibproblemen [und das sind wahr- }
{ scheinlich 90 %]: Daten ist [unter anderem] die Mehrzahl von }
{ Datum ...). }
{ ---------------------------------------------------------------- }
{ (c) Aurora featuring Markus SCHWAIGER 1989 - 1991 }
{ ---------------------------------------------------------------- }
UNIT ADatum;
INTERFACE
USES
{$IFDEF Windows} { F.r 'GETDATE' }
WinDOS; { Windows-DOS-Routinen }
{$ELSE}
DOS; { DOS-DOS-Routinen }
{$ENDIF}
TYPE
{ ---------------------------------------------------------------- }
{ Datums-Record: die meisten Datumsoperationen arbeiten mit diesem }
{ Format, das einen ganz vern.nftigen Mittelweg zwischen .ber- }
{ schaubarkeit und Speicherplatzbedarf darstellt (wer's nicht }
{ glaubt, der versuche einmal ohne "UNPACKTIME" herauszufinden, }
{ was in der LongInt-Zahl steckt, die DOS dem unbedarften Program- }
{ mierer vorsetzt ...). }
{ ---------------------------------------------------------------- }
TDate = RECORD
Tag,
Monat : BYTE;
Jahr : WORD;
END;
{ ---------------------------------------------------------------- }
{ LongInt-Version des Datums-Records: Wird de facto nur in den }
{ internen Berechnungsroutinen verwendet, um .berl.ufe zu ver- }
{ meiden. }
{ ---------------------------------------------------------------- }
TDateL = RECORD
Tag,
Monat,
Jahr : LONGINT;
END;
{ ---------------------------------------------------------------- }
{ R.ckgabe von "ExtrDbDatum" - Format "JJJJMMTT". Siehe dort. }
{ ---------------------------------------------------------------- }
stR8 = STRING [8];
{ ---------------------------------------------------------------- }
{ Wird von "ExtrDatum" verwendet, um zu signalisieren, da. kein }
{ g.ltiges Datum extrahiert werden konnte. }
{ ---------------------------------------------------------------- }
VAR
NoDate : BOOLEAN;
CONST
{ ---------------------------------------------------------------- }
{ Falls sich unsere Zeitrechnung wieder einmal .ndern sollte, so }
{ k.nnen hier die Tage pro Monat angepa.t werden (sofern man sich }
{ nicht gleich auch auf derer zehn einigt). }
{ ---------------------------------------------------------------- }
AnzahlTage : ARRAY [1 .. 12] OF BYTE =
(31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31);
{ ---------------------------------------------------------------- }
{ Wenn das Flag True ist, so gibt "WochenTag" f.r die Tage eine }
{ Zahl zwischen 1 und 7 zur.ck, sonst zwischen 0 und 6. }
{ ---------------------------------------------------------------- }
Tage17 : BOOLEAN = True;
{ ---------------------------------------------------------------- }
{ Wenn das Flag True ist, so ist die R.ckgabe f.r den Sonntag 7 }
{ (bzw., wenn Tage17 False ist, 6) und f.r den Montag 1 (bzw. 0), }
{ sonst ist der Sonntag 1 (bzw. 0) und der Montag 2 (bzw. 1). }
{ ---------------------------------------------------------------- }
Sonntag7 : BOOLEAN = True;
{ ---------------------------------------------------------------- }
{ M.glicher Wertebereich der Daten f.r 'ExtrDatum', entspricht so }
{ in der G.ltigkeit unseres heutigen Kalenders (Gregorianischer }
{ welcher). }
{ Sollte in einer Geburtstags-Gl.ckwunsch-Verwaltung (wenn jemand }
{ eine erfindet, die gleich die Geschenke aussucht und wom.glich }
{ auch noch kauft oder gar bezahlt, bitte bei mir melden !) be- }
{ kannt sein, da. niemand im eigenen Freundeskreis so alt ist }
{ (fragt mal die Schwiegermutter !), so w.re es vielleicht nicht }
{ schlecht, wenn die Grenzen den eigenen Bed.rfnissen angepa.t }
{ werden, wodurch sie Fehlersicherheit nicht unbetr.chtlicht er- }
{ h.ht wird. }
{ Aber andererseits unterst.tzen die meisten Rechner sowieso nur }
{ Datumsangaben von 1900 bis 1999 oder gar nur ab 1980 (da wurde }
{ n.mlich der PC erfunden) - ich freue mich schon auf die Jahr- }
{ tausendwende (ob ich wohl bis dahin endlich mein Diplom habe ?). }
{ ---------------------------------------------------------------- }
JahrMin : WORD = 1583;
JahrMax : WORD = 2800;
{ ---------------------------------------------------------------- }
{ Gibt als Ergebnis 'True', wenn 'Jahr' ein Schaltjahr ist / war / }
{ sein wird, sonst 'False'. }
{ Mehr als der Bereich von 1583 bis 2800 (die untere Grenze wegen }
{ der letzten Kalenderreform, die obere, weil dann unsere Astro- }
{ nomen (nicht Astrologen ...) irgendwann wieder ein zus.tzliches }
{ Schaltjahr einf.gen (oder doch eines wegnehmen ?) m.ssen - aber }
{ bei den heutigen Software-Lebenszyklen d.rfte das wohl kein }
{ Problem sein. (Vergleiche entsprechenden Kommentar bei "JahrMin" }
{ / "JahrMax".) }
{ ---------------------------------------------------------------- }
FUNCTION SchaltJahr (Jahr : WORD) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ Berechnet die Anzahl der Tage zwischen zwei Daten. Sollte Datum1 }
{ gr..er sein als Datum2, so wird trotzdem der korrekte Abstand }
{ ausgegeben, d.h. das Ergebnis ist immer positiv ! }
{ ---------------------------------------------------------------- }
{ Sollte der Datumsrecord ung.ltige Werte enthalten (beispiels- }
{ weise 0/0/0, weil ein vorheriges ExtrDatum erfolglos war), so }
{ wird -1 zur.ckgegeben. }
{ ---------------------------------------------------------------- }
FUNCTION Tage (Datum1, Datum2 : TDate) : LONGINT;
{ ---------------------------------------------------------------- }
{ Berechnet, auf welchen Wochentag ein Datum f.llt / fiel / fallen }
{ wird. Das Format wird durch die globalen typisierten bool'schen }
{ Konstanten Tage17 und Sonntag7 bestimmt (siehe INTERFACE). }
{ ---------------------------------------------------------------- }
{ Sollte kein g.ltiges Datum angegeben worden sein, so wird ein }
{ Montag zur.ckgegeben. }
{ ---------------------------------------------------------------- }
FUNCTION WochenTag (Datum : TDate) : BYTE;
{ ---------------------------------------------------------------- }
{ Wie WochenTag, der Unterschied ist der, da. hier der Tag im }
{ Klartext zur.ckgegeben wird. }
{ ---------------------------------------------------------------- }
FUNCTION WochenTagSt (Datum : TDate) : STRING;
{ ---------------------------------------------------------------- }
{ Ermittelt mit Hilfe der Funktion GETDATE aus der Unit 'DOS' das }
{ aktuelle Systemdatum und gibt es in der in diesem Modul .blichen }
{ Form ans aufrufende Programm zur.ck (LONGINT: JJJJMMTT, Date: }
{ Siehe Interface. }
{ Hoffentlich ist das kein Uralt-XT ohne Echtzeituhr ... }
{ ---------------------------------------------------------------- }
FUNCTION HoleAktDatum (VAR Ergebnis : TDate) : LONGINT;
{ ---------------------------------------------------------------- }
{ Die wichtigste (und aufwendigste) Routine in dieser Unit: Aus }
{ einem beinahe beliebigem Eingabeformat wird das Datum (sofern }
{ enthalten) extrahiert und als LONG-INT (JJJJMMTT) sowie als }
{ Record vom Typ 'Date' zur.ckgegeben. Sollten nur Tag und Monat }
{ angegeben worden sein, so wird mit dem aktuellen Jahr erg.nzt. }
{ Anstandslos erkannt werden z.B.: }
{ 11.1.1970 }
{ Salzburg, am 27. 8. 1989 }
{ 1980-01-03 }
{ 700203 Funktioniert nur, wenn das Jahr }
{ 110180 gr..er als 31 ist. }
{ 900230 --> Fehlermeldung, 31. Februar ... ?! }
{ 'Fehlermeldung' hei.t, da. ExtrDatum = '' und Ergebnis 0 / 0 / 0 }
{ wird. Ebenfalls, wenn das Datum nicht aus der Eingabe extrahiert }
{ werden kann. }
{ ---------------------------------------------------------------- }
FUNCTION ExtrDatum (Eingabe : STRING; VAR Ergebnis : TDate) :
LONGINT;
{ ---------------------------------------------------------------- }
{ Extrahiert das Datum aus einer beinahe beliebigen Eingabeform. }
{ Aus den gewonnenen Daten wird ein String der L.nge 8 erzeugt, }
{ der dem von dBase-Dateien geforderten Format entspricht - als da }
{ ist "JJJJMMTT" mit Leerzeichen an den leeren Stellen; also bei- }
{ spielsweise "1970 111" f.r den 11. J.nner 1970 - .brigens ein }
{ Datum von hervorragender historischer Bedeutung. }
{ Sollte kein vern.nftiges Ergebnis extrahiert werden k.nnen, so }
{ wird das aktuelle Systemdatum zur.ckgegeben und die globale }
{ Variable "NoDate" gesetzt. }
{ ---------------------------------------------------------------- }
FUNCTION ExtrDbDatum (Eingabe : STRING) : stR8;
{ ---------------------------------------------------------------- }
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson