Delphi-Quellcode:
function DayOfWeekGerman(ADate: TDateTime): Integer;
begin
Result := DayOfWeek(ADate) -1;
if Result <= 0 then Result := 7;
end;
function WeekOfDate(A: TDateTime): Integer;
var
Day: Integer;
Y,M,D: Word;
begin
Day := DayOfWeekGerman(A);
DecodeDate(A +4 -Day, Y, M, D);
Result := Round(((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7);
end;
procedure TForm1.Button1Click(Sender: TObject);
var dat : TDateTime;
begin
ShowMessage(IntToStr(WeekOfDate(StrToDateTime('06.01.2010 11:59:59')))+#13#10+
IntToStr(WeekOfDate(StrToDateTime('06.01.2010 12:00:00'))));
end;
ich komme hierbei leider zum selben ergebnis :-/
Schreibt man den Wert von
((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7
in einen double, dann sieht man auch warum.
Bei '06.01.2010 11:59:59' ergibt dann
((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7 = 1.4999983466
Bei '06.01.2010 12:00:00' ergibt dann
((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7 = 1.5
und da
Round(1.5) = 2
entsteht der Fehler.