Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Kalenderwochen Funktion Falsch?

  Alt 6. Jan 2010, 21:44
Zitat von Daniel G:
Dann sollte der Nachkommateil vielleicht lieber weggefiltert werden. :gruebel: Statt Delphi-Referenz durchsuchenRound also Delphi-Referenz durchsuchenTrunc
Nein, das bringt nichts.
Hagens Routine arbeitet fehlerfrei, solange der TDateTime Wert ganzzahlig ist.
Wenn der TDateTime-Wert einen Zeitanteil hat, bringt sie an bestimmten Tagen dann fehlerhafte Resultate, wenn der Zeitanteil >= 12 Stunden ist.
Also sollte am Anfang der Routine eine Zeile
A := Int(A); eingefügt werden.

Vielleicht sollte man die letzte Zeile ändern
von
Result := Round(((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7); in
Result := Trunc(0.5+((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7); weil das besser zeigt, was gerechnet werden soll.
M.E. sollte die Routine dann so aussehen:
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;
  n:extended;
begin
  A := Int(A);
  Day := DayOfWeekGerman(A);
  DecodeDate(A +4 -Day, Y, M, D);
  Result := Trunc(0.5+((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7);
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat