Forum: Programmieren allgemein
by Amateurprofi,
28. Dez 2017
@Solutor:
Nein! Deine Funktion arbeitet für den gesamten Zahlenbereich, der von TDateTime unterstützt wird korrekt, außer eben für Montag bis Freitag im Dezember 1899.
Naja! Was sind Anwendungen im täglichen Leben?
Stell dir vor du sitzt bei Günter Jauch und kriegst als 1 Mio € Frage "Wann wurde Humphrey Bogart geboren" und gefragt ist das genaue Datum. Mit deinem vorletzten Joker...
Forum: Programmieren allgemein
by Amateurprofi,
26. Dez 2017
Ich hab mir das noch einmal angeschaut und die Funktion aus #9 optimiert.
Die neue Version ist noch einmal fast doppelt so schnell und ist auch verständlicher aufgebaut.
FUNCTION LastWeekDayOfMonth(Year,Month,WeekDay:Word):TDateTime;
const Days:Array of Integer=(31,59,90,120,151,181,212,243,273,304,334,365);
var DN,DoW:Integer;
begin
DN:=Days;
if (Month>=2) and ((Year Mod 4=0) and...
Forum: Programmieren allgemein
by Amateurprofi,
26. Dez 2017
Ja, da übersiehst du etwas.
1) Hier
Day:=DIM+Ord((Month=2) and ((Year mod 4=0) and (Year mod 100<>0) or (Year mod 400=0)));
2) Und hier
Inc(DN,Year div 4 - Year div 100 + Year div 400);
Forum: Programmieren allgemein
by Amateurprofi,
26. Dez 2017
Naja, wenn es um Schnelligkeit geht dann so:
// WeekDay 0=Mo, 6=So
FUNCTION LastWeekDayOfMonth(Year,Month,WeekDay:Integer):TDateTime;
const DIM:Array of byte=(31,28,31,30,31,30,31,31,30,31,30,31);
var Day,DN,DoW,Y:Integer;
begin
Y:=Year;
Day:=DIM+Ord((Month=2) and ((Year mod 4=0) and (Year mod 100<>0) or (Year mod 400=0)));
DN:=Year*365+Day+31*(Month-1);