[fpc-devel] Problem with Now() and time changed by ntpd

Hans-Peter Diettrich DrDiettrich1 at aol.com
Fri Nov 4 12:50:07 CET 2011


Sven Barth schrieb:

> var
>   st: TSystemTime;
>   dt: TDateTime;
> begin
>   GetLocalTime(st);
>   dt := SystemTimeToDateTime(st);
>   Writeln(FormatDateTime('c', dt));
>   GetSystemTime(st);
>   dt := SystemTimeToDateTime(st);
>   Writeln(FormatDateTime('c', dt));
>   Readln;
> end.
> 
> === source end ===
> 
> As long as your time zone isn't UTC you will see two different times.

Okay, when you get the *decoded* date/time, the conversion into 
TDateTime is straight forward. [I missed that the WinAPI provides both 
times in that format].

But then I wonder why you *ever* want to convert TSystemTime into 
TDateTime, when it will be converted back again in the date/time 
formatting (and other) procedures. It would be much faster to display or 
write out a time stamp, based directly on TSystemTime.

POSIX gettimeofday() instead does not return a decoded date/time, so 
that Delphi uses localtime_r() to decode it. The inverse function must 
be used then, to decode a TDateTime for display and other date/time 
handling. When the RTL implements both these procedures, there should 
not remain any time difference in the Now() and other procedures on 
Windows and Linux, based on something like an tick count.

DoDi




More information about the fpc-devel mailing list