[<<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