home *** CD-ROM | disk | FTP | other *** search
- DECLARE FUNCTION Ultimo! (Datum$)
- DECLARE FUNCTION Schaltjahr% (Datum$)
- DECLARE FUNCTION Datumstest$ (Datum$)
- DECLARE FUNCTION Monat$ (Datum$)
- DECLARE FUNCTION VonBis$ (Datum$, Differenz!)
- DECLARE FUNCTION DiffDate! (Datum1$, Datum2$)
- DECLARE FUNCTION Wotag$ (Datum$)
- DECLARE FUNCTION SysDate$ ()
- DECLARE FUNCTION Gregor$ (Jul!)
- DECLARE FUNCTION Julian! (Datum$)
-
- '* ------------------------------------------------------- *
- '* DATUM.BAS *
- '* Kalendermodule *
- '* (c) 1989 W.Rinke & TOOLBOX *
- '* ------------------------------------------------------- *
- CONST TRUE = -1
- CONST FALSE = 0
-
-
- DIM Tabelle$(1 TO 42)
-
- Kalenderjahr = 1990
-
- '* ----------------- Überschrift ------------------------- *
- Message$ = "toolbox wünscht Ihnen Gesundheit und Erfolg in "
- Message$ = Message$ + LTRIM$(STR$(Kalenderjahr))
- underld$ = STRING$(80, "=")
- trailer = (80 - LEN(Message$)) / 2
- Message$ = SPACE$(trailer) + Message$
-
- LPRINT Message$
- LPRINT underld$: LPRINT
-
- FOR zaehler = 1 TO 12
- Mon = zaehler
- Mondstring$ = LTRIM$(STR$(Mon))
- IF LEN(Mondstring$) = 1 THEN
- Mondstring$ = "0" + Mondstring$
- END IF
- Daystring$ = "01"
- Datestring$ = Daystring$ + "." + Mondstring$ + "."
- Datestring$ = Datestring$ + LTRIM$(STR$(Kalenderjahr))
-
- SELECT CASE Wotag$(Datestring$)
- CASE IS = "Montag"
- Offset = 0
- CASE IS = "Dienstag"
- Offset = 1
- CASE IS = "Mittwoch"
- Offset = 2
- CASE IS = "Donnerstag"
- Offset = 3
- CASE IS = "Freitag"
- Offset = 4
- CASE IS = "Samstag"
- Offset = 5
- CASE IS = "Sonntag"
- Offset = 6
- END SELECT '* für "leere Tage" am Monatsanfang
-
- '* ----------- Vorbereiten der Monatstabellen ---------- *
- FOR i = 1 TO Offset
- Tabelle$(i) = " "
- NEXT i
-
- FOR i = Offset + 1 TO Ultimo(Datestring$) + Offset
- h$ = LTRIM$(STR$(i - Offset))
- IF LEN(h$) = 1 THEN h$ = " " + h$
- Tabelle$(i) = h$ + " "
- NEXT i
-
- FOR i = Ultimo(Datestring$) + Offset + 1 TO 42
- Tabelle$(i) = " "
- NEXT i
-
- '* ---------- Monatstabelle ausgeben ------------------- *
- LPRINT " "; Monat$(Datestring$)
- LPRINT "---------------------------------"
- LPRINT "Montag ";
- FOR i = 0 TO 5
- LPRINT Tabelle$(i * 7 + 1);
- NEXT i : LPRINT
- LPRINT "Dienstag ";
- FOR i = 0 TO 5
- LPRINT Tabelle$(i * 7 + 2);
- NEXT i : LPRINT
- LPRINT "Mittwoch ";
- FOR i = 0 TO 5
- LPRINT Tabelle$(i * 7 + 3);
- NEXT i: LPRINT
- LPRINT "Donnerstag ";
- FOR i = 0 TO 5
- LPRINT Tabelle$(i * 7 + 4);
- NEXT i: LPRINT
- LPRINT "Freitag ";
- FOR i = 0 TO 5
- LPRINT Tabelle$(i * 7 + 5);
- NEXT i: LPRINT
- LPRINT "Samstag ";
- FOR i = 0 TO 5
- LPRINT Tabelle$(i * 7 + 6);
- NEXT i : LPRINT
- LPRINT "Sonntag ";
- FOR i = 0 TO 5
- LPRINT Tabelle$(i * 7 + 7);
- NEXT i: LPRINT : LPRINT
-
- NEXT zaehler
-
- END
-
-
- FUNCTION Datumstest$ (Datum$)
- '* ------------------------------------------------------- *
- '* Plausibilitätsüberprüfung von Datumseingaben *
- '* Eingabe: das zu testende Datum *
- '* Ausgabe: Fehlermeldung *
-
- IF LEN(Datum$) <> 10 THEN
- Datumstest$ = "Datum bitte in der Form <dd.mm.jjjj>!"
- EXIT FUNCTION
- END IF
-
- dd = VAL(LEFT$(Datum$, 2))
- mm = VAL(MID$(Datum$, 4, 2))
- jj = VAL(RIGHT$(Datum$, 2))
-
- IF (dd < 1) OR (dd > Ultimo(Datum$)) THEN
- Datumstest$ = "diesen Tag gibt's nicht !"
- EXIT FUNCTION
- END IF
-
- IF (mm < 1) OR (mm > 12) THEN
- Datumstest$ = "Monate nur von 1..12 !"
- EXIT FUNCTION
- END IF
-
- Datumstest$ = ""
-
- END FUNCTION
-
-
- FUNCTION DiffDate (Datum1$, Datum2$)
- '* ------------------------------------------------------- *
- '* Absolute Differenz zwischen zwei Daten *
-
- jul1 = Julian(Datum1$)
- jul2 = Julian(Datum2$)
-
- IF jul1 >= jul2 THEN
- DiffDate = jul1 - jul2
- ELSE
- DiffDate = jul2 - jul1
- END IF
-
- END FUNCTION
-
-
- FUNCTION Gregor$ (Jul)
- '* ------------------------------------------------------- *
- '* Umrechnung von Julianischer Tageszählung in *
- '* Gregorianisches Datum *
- '* Algorithmen aus PASCAL 7'87 *
-
- JulReferenz = 2305812# '* hat im Hauptmodul nix zu
- JulRefJahr = 1601 '* suchen !
-
- jahr = JulRefJahr
- Diff = Jul - JulReferenz
- Tage = INT(Diff)
-
- IF Tage > 146097 THEN
- Hilfe = INT(Tage / 146097)
- Tage = Tage - 146097 * Hilfe
- jahr = jahr + 400 * Hilfe
- END IF
-
- IF Tage > 36524 THEN
- Hilfe = INT(Tage / 36524)
- Tage = Tage - 36524 * Hilfe
- jahr = jahr + 100 * Hilfe
- END IF
-
- IF Tage > 1461 THEN
- Hilfe = INT(Tage / 1461)
- Tage = Tage - 1461 * Hilfe
- jahr = jahr + 4 * Hilfe
- END IF
-
- IF Tage > 365 THEN
- Hilfe = INT(Tage / 365)
- Tage = Tage - 365 * Hilfe
- jahr = jahr + Hilfe
- END IF
-
- IF Tage <> 0 THEN
- Hilfe = 0: mond = 0: Laenge = 0
- DO
- Tage = Tage - Laenge
- mond = mond + 1
- Hilfe = 1 - Hilfe
- IF mond = 8 THEN Hilfe = 1
- Laenge = 30 + Hilfe
- IF mond = 2 THEN
- Laenge = Laenge - 2
- j = jahr
- IF j MOD 100 THEN j = j / 100
- IF j MOD 4 THEN Laenge = Laenge + 1
- END IF
- LOOP UNTIL Tage <= Laenge
- tag = FIX(Tage)
- jahr = FIX(jahr)
- mond = FIX(mond)
- ELSE
- jahr = FIX(jahr) - 1
- mond = 12
- tag = 31
- END IF
-
- tag$ = LTRIM$(STR$(tag))
- IF LEN(tag$) = 1 THEN tag$ = "0" + tag$
- mond$ = LTRIM$(STR$(mond))
- IF LEN(mond$) = 1 THEN mond$ = "0" + mond$
- Gregor$ = tag$ + "." + mond$ + "." + LTRIM$(STR$(jahr))
-
- END FUNCTION
-
-
- FUNCTION Julian (Datum$)
- '* ------------------------------------------------------- *
- '* Umrechnung Gregorianisches Datum -> Julianisch *
-
- JulReferenz = 2305812#
- JulRefJahr% = 1601
-
- tag% = VAL(LEFT$(Datum$, 2))
- mond% = VAL(MID$(Datum$, 4, 2))
- jahr% = VAL(RIGHT$(Datum$, 4))
-
- j1 = jahr% - JulRefJahr%
- jd = JulReferenz + j1 * 365
- jd = jd + INT(j1 / 4) - INT(j1 / 100) + INT(j1 / 400)
-
- IF mond% > 2 THEN
- jd = jd + INT(30.6 * mond% - 32.3)
- j2 = jahr%
- IF j2 MOD 100 = 0 THEN j2 = INT(j2 / 100)
- IF j2 MOD 4 = 0 THEN jd = jd + 1
- ELSE
- jd = jd + 31 * mond% - 31
- END IF
-
- Julian = jd + tag%
-
- END FUNCTION
-
-
- FUNCTION Monat$ (Datum$)
- '* ------------------------------------------------------- *
- '* Gibt zum übergebenen Datum den Monat im "Klartext" aus *
-
- mond = VAL(MID$(Datum$, 4, 2))
- SELECT CASE mond
- CASE 1
- Monat$ = "Januar"
- CASE 2
- Monat$ = "Februar"
- CASE 3
- Monat$ = "März"
- CASE 4
- Monat$ = "April"
- CASE 5
- Monat$ = "Mai"
- CASE 6
- Monat$ = "Juni"
- CASE 7
- Monat$ = "Juli"
- CASE 8
- Monat$ = "August"
- CASE 9
- Monat$ = "September"
- CASE 10
- Monat$ = "Oktober"
- CASE 11
- Monat$ = "November"
- CASE 12
- Monat$ = "Dezember"
- END SELECT
-
- END FUNCTION
-
-
- FUNCTION Schaltjahr% (Datum$) '* Quasi-Boolean
- '* ------------------------------------------------------- *
- '* Schaltjahr oder keins? *
- '* TRUE (-1) und FALSE (0) stehen im Hauptprogramm *
-
- Schaltjahr = FALSE
- aa = VAL(RIGHT$(Datum$, 4))
- IF aa MOD 100 = 0 THEN aa = aa / 100
- IF aa MOD 4 = 0 THEN Schaltjahr = TRUE
-
- END FUNCTION
-
-
- FUNCTION SysDate$
- '* ------------------------------------------------------- *
- '* Wandelt das Systemdatum in eine Zeichenkette um, mit *
- '* der die Bibliotheksroutinen arbeiten können *
-
- Datum$ = DATE$
-
- tag$ = MID$(Datum$, 4, 2)
- mond$ = LEFT$(Datum$, 2)
- jahr$ = RIGHT$(Datum$, 4)
-
- SysDate$ = tag$ + "." + mond$ + "." + jahr$
-
- END FUNCTION
-
-
- FUNCTION Ultimo (Datum$)
- '* ------------------------------------------------------- *
- '* Bestimmung des "Monatsletzten" *
-
- mm = VAL(MID$(Datum$, 4, 2))
-
- SELECT CASE mm
- CASE 4, 6, 9, 11
- Ultimo = 30
- CASE 1, 3, 5, 7, 8, 10, 12
- Ultimo = 31
- CASE 2
- IF Schaltjahr(Datum$) THEN
- Ultimo = 29
- ELSE
- Ultimo = 28
- END IF
- END SELECT
-
- END FUNCTION
-
-
- FUNCTION VonBis$ (Datum$, Differenz)
- '* ------------------------------------------------------- *
- '* Beantwortet Fragen wie: *
- '* "Welches Datum ist in 100 Tagen?" *
- '* "Welches Datum war vor 365 Tagen?" (Oh nein!) *
-
- jul1 = Julian(Datum$)
- jul2 = jul1 + Differenz
- VonBis$ = Gregor$(jul2)
-
- END FUNCTION
-
-
- FUNCTION Wotag$ (Datum$)
- '* ------------------------------------------------------- *
- '* Gibt den Wochentag im Klartext zurück *
-
- F = Julian(Datum$)
- wert = FIX(F - 7 * INT(F / 7))
-
- SELECT CASE wert
- CASE 0
- Wotag$ = "Dienstag"
- CASE 1
- Wotag$ = "Mittwoch"
- CASE 2
- Wotag$ = "Donnerstag"
- CASE 3
- Wotag$ = "Freitag"
- CASE 4
- Wotag$ = "Samstag"
- CASE 5
- Wotag$ = "Sonntag"
- CASE 6
- Wotag$ = "Montag"
- END SELECT
-
- END FUNCTION
-
- '* ------------------------------------------------------- *
- '* Ende von DATUM.BAS *