Hi,
ich habe ein kleines Problem mit der Funktion SecondsBetween aus den DateUtils. Diese gibt in manchen Fällen ein fehlerhaftes Ergebnis aus. Beispiel:
Delphi-Quellcode:
program Test;
{$APPTYPE CONSOLE}
uses
SysUtils, DateUtils;
var
Date1, Date2: TDateTime;
Dummy: Char;
begin
Date1 := StrToDateTime('20.05.2010 13:57:40');
Date2 := StrToDateTime('20.05.2010 14:02:40');
WriteLN(DateTimeToStr(Date1), ' - ', DateTimeToStr(Date2), ' = ', SecondSpan(Date1, Date2), ' = ', SecondsBetween(Date1, Date2));
Date1 := StrToDateTime('20.05.2010 14:57:40');
Date2 := StrToDateTime('20.05.2010 15:02:40');
WriteLN(DateTimeToStr(Date1), ' - ', DateTimeToStr(Date2), ' = ', SecondSpan(Date1, Date2), ' = ', SecondsBetween(Date1, Date2));
Read(Dummy);
end.
Ergebnis:
Zitat:
20.05.2010 13:57:40 - 20.05.2010 14:02:40 = 2.99999999720603E+0002 = 299
20.05.2010 14:57:40 - 20.05.2010 15:02:40 = 3.00000000349246E+0002 = 300
Beides mal ist der Unterschied genau 5 Minuten (= 300 Sekunden), der erste Aufruf zeigt aber eine Differenz von 299 Sekunden!
Das wird wohl daran liegen, dass TDateTime ein Double ist und darum Ungenauigkeiten in den Nachkommabereichen auftreten. Allerdings erwarte ich von einer offiziellen Funktion dass diese auch funktioniert (Wortspiel!
).
Ich behelfe mir im Moment so:
Delphi-Quellcode:
function MySecondsBetween(const ANow, AThen: TDateTime): Int64;
begin
Result := Round(SecondSpan(ANow, AThen));
end;
ich weiß aber nicht, ob sich diese Funktion immer richtig verhält.
Was haltet ihr davon?
Dominik