Einzelnen Beitrag anzeigen

dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

SecondsBetween fehlerhaft?

  Alt 20. Mai 2010, 14:03
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
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat