home *** CD-ROM | disk | FTP | other *** search
- DECLARE FUNCTION Ostern$ (Datum$)
- DECLARE FUNCTION Bettag$ (Datum$)
- DECLARE FUNCTION Vollmond$ (Datum$)
- DECLARE FUNCTION wochtag! (Datum$)
- DECLARE FUNCTION VonBis$ (Datum$, Differenz!)
- DECLARE FUNCTION Gregor$ (Jul!)
- DECLARE FUNCTION Julian! (Datum$)
-
- '* ------------------------------------------------------- *
- '* FEIERTAG.BAS *
- '* Berechnung der beweglichen Feiertage *
- '* (c) 1989 S.Hund, W.Rinke & TOOLBOX *
- '* ------------------------------------------------------- *
- CONST TRUE = -1
- CONST FALSE = 0
-
- CLS
-
- Datum$ = "01.01.1989"
-
- basis$ = Ostern$(Datum$)
- bbtag$ = Bettag$(Datum$)
- PRINT "Feiertage "; RIGHT$(Datum$, 4)
- PRINT
- PRINT "Neujahr : "; "01.01."; RIGHT$(Datum$, 4)
- PRINT "Hl. Drei Könige : "; "06.01."; RIGHT$(Datum$, 4)
- PRINT "Karfreitag : "; VonBis$(basis$, -2)
- PRINT "Ostersonntag : "; basis$
- PRINT "Ostermontag : "; VonBis$(basis$, 1)
- PRINT "Himmelfahrt : "; VonBis$(basis$, 39)
- PRINT "Pfingstsonntag : "; VonBis$(basis$, 49)
- PRINT "Pfingstmontag : "; VonBis$(basis$, 50)
- PRINT "Fronleichnam : "; VonBis$(basis$, 60)
- PRINT "Tag der dt. Einheit : "; "17.06."; RIGHT$(Datum$, 4)
- PRINT "Mariä Himmelfahrt : "; "15.08."; RIGHT$(Datum$, 4)
- PRINT "Allerheiligen : "; "01.11."; RIGHT$(Datum$, 4)
- PRINT "Buß- und Bettag : "; bbtag$
- PRINT "Weihnachten : "; "25.12."; RIGHT$(Datum$, 4)
-
- END
-
-
- FUNCTION Bettag$ (Datum$)
- '* ------------------------------------------------------- *
- '* Berechnung des Buß- und Bettags
-
- jahr$ = RIGHT$(Datum$, 4)
- FOR tag = 16 TO 22
- btag$ = LTRIM$(STR$(tag) + ".11." + jahr$)
- IF wochtag(btag$) = 1 THEN EXIT FOR
- NEXT tag
- Bettag$ = LTRIM$(btag$)
-
- 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 Ostern$ (Datum$)
- '* ------------------------------------------------------- *
- '* Berechnung des Ostersonntags
-
- voll$ = Vollmond$(Datum$)
- wovo = wochtag(voll$)
- diff = 5 - wovo
- IF wovo < 0 THEN diff = wovo + 7
- Ostern$ = VonBis(voll$, diff)
-
- END FUNCTION
-
-
- FUNCTION Vollmond$ (Datum$)
- '* ------------------------------------------------------- *
- '* Berechnung des ersten Vollmonds nach dem 21.3.
-
- jahr = VAL(RIGHT$(Datum$, 4))
- rest = jahr MOD 19
-
- SELECT CASE rest
- CASE IS = 0
- tag$ = "14"
- CASE IS = 1
- tag$ = "03"
- CASE IS = 2
- tag$ = "23"
- CASE IS = 3
- tag$ = "11"
- CASE IS = 4
- tag$ = "31"
- CASE IS = 5
- tag$ = "18"
- CASE IS = 6
- tag$ = "08"
- CASE IS = 7
- tag$ = "28"
- CASE IS = 8
- tag$ = "16"
- CASE IS = 9
- tag$ = "05"
- CASE IS = 10
- tag$ = "25"
- CASE IS = 11
- tag$ = "13"
- CASE IS = 12
- tag$ = "02"
- CASE IS = 13
- tag$ = "22"
- CASE IS = 14
- tag$ = "10"
- CASE IS = 15
- tag$ = "30"
- CASE IS = 16
- tag$ = "17"
- CASE IS = 17
- tag$ = "07"
- CASE IS = 18
- tag$ = "27"
- END SELECT
-
- SELECT CASE rest
- CASE 2, 4, 7, 19, 13, 15, 18
- mon$ = "03"
- CASE ELSE
- mon$ = "04"
- END SELECT
-
- Vollmond$ = tag$ + "." + mon$ + "." + RIGHT$(Datum$, 4)
-
- 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 wochtag (Datum$)
- '* ------------------------------------------------------- *
- '* gibt den Wochentag als Zahl zwischen 1..7 zurück
- '* (Dienstag = 0)
-
- F = Julian(Datum$)
- wochtag = FIX(F - 7 * INT(F / 7))
-
- END FUNCTION
- '* ------------------------------------------------------- *
- '* Ende von DATUM.BAS *
-
-