[fpc-pascal] <time_fraction>Between bug?

Marco van de Voort marcov at stack.nl
Sun May 30 14:18:19 CEST 2010


In our previous episode, Bee Jay said:
> Hi all,
> 
> Try the following code snippet:
> 
> uses
>   DateUtils;
> var
>   a,b: TDateTime;
>   i: integer;
> begin
>   a := EncodeDateTime(2010, 1, 1, 0, 0, 0, 0);
>   for i := 0 to 9 do
>   begin
>     b := EncodeDateTime(2010, 1, 1, 0, 0, i, 0);
>     Writeln(SecondsBetween(a,b):3);
>   end;
> end;
> 
> I think the result isn't correct. It also affects other
> <time_fraction>Between functions e.g.  SecondsBetween, MinutesBetween,
> etc.
> 
> But if I changed the milisecond part of a or b or both to anything but 0
> then the result is correct.  Is this a bug?  Or did I miss something?

IIRC this is normal and delphi compatible and due to TDatetime being a
floating point type.

 *between does a trunc, and
"time" is a floating point values, so values might be rounded here and
there.

Sometimes the rounding means that e.g. date+1second is rounded to a bit more
than date + 1second.  Then later secondsbetween sees no whole second between
and this results in this behaviour.




More information about the fpc-pascal mailing list