Einzelnen Beitrag anzeigen

Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Kalenderwochen Funktion Falsch?

  Alt 6. Jan 2010, 09:51
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.
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat