NicknameFJ hat geschrieben:DrFalo hat geschrieben:Fehler oder sonstige Anmerkungen
Die Multiplikation und Division könnte man sich wohl sparen - ungetestet.
Jawoll
Code: Alles auswählen
Procedure Wochentag(Datum.s)
Protected SchaltTag, ZeitWert.q
Protected Jahr = Val(StringField(Datum, 3, "."))
Protected Monat = Val(StringField(Datum, 2, "."))
Protected Tag = Val(StringField(Datum, 1, "."))
For A = 0 To Jahr - 1
If Not A % 400 Or (Not A % 4 And A % 100)
SchaltTag + 1
EndIf
Next A
ZeitWert = (Jahr - 1) * 365 + SchaltTag
For A = 1 To Monat - 1
Zeitwert + Val(StringField("31,28,31,30,31,30,31,31,30,31,30,31", A, ","))
Next A
If Monat > 2 Or (Monat = 2 And Tag = 29)
If Not Jahr % 400 Or (Not Jahr % 4 And Jahr % 100)
ZeitWert + 1
EndIf
EndIf
ZeitWert + (Tag - 1)
ProcedureReturn Zeitwert % 7
EndProcedure
Debug Wochentag("21.11.1964")
Habs inzwischen für die Teilung von über 4800 Ziehungen seit 1955 des Sa und Mi Lottos ausprobiert. Arbeitet einwandfrei...
Nur etwas mehr Geschwindigkeit dürfte noch sein.
P.S. Die dürfte in der ersten Schleife zu holen sein, in dem man nicht beim Jahr 0 anfängt sondern z.B. bei 1950 (in meinem Fall z.B.)...