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

Sven Barth pascaldragon at googlemail.com
Thu Nov 3 21:30:19 CET 2011


Am 02.11.2011 19:25, schrieb Ludo Brands:
> Apparently not everything is that transparent under windows:
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms724944%28v=vs.85%2
> 9.aspx
>
> "To inform Explorer that the time zone has changed, send the
> WM_SETTINGCHANGE message."
>

WM_SETTINGCHANGE simply notifies you that the user changed the time 
zone, because otherwise you might not be able to detect that (except you 
read the settings from the registry yourself).

> Or:
>
> http://channel9.msdn.com/coding4fun/articles/Changing-time-zones
>
> "By itself, changing the time zone doesn't have any apparent effect except
> in new processes.  In order to see the change, you need to send a system
> notification message.  This notification is made by calling
> SendMessageTimeout with WM_SettingChange and a parameter of "intl". "

This is wrong. Changing the timezone effects e.g. all following calls to 
GetLocalTime. See the following example program:

=== source begin ===

program timezonetest;

{$apptype console}
{$mode objfpc}{$H+}

uses
   SysUtils;

begin
   Writeln(FormatDateTime('c', Now));
   Writeln('Please change the timezone and then press enter');
   Readln;
   Writeln(FormatDateTime('c', Now));
   Writeln('Done');
   Readln;
end.

=== source end ===

As you see there is no message processing.

My normal timezone is Berlin. Now I've run the program and changed the 
timezone to Greenland (-3h). The output was the following:

=== output begin ===

03.11.2011 21:16:33
Please change the timezone and then press enter

03.11.2011 17:17:10
Done

=== output end ===

So your link which talks about "only affects new processes" is proven wrong.

Regards,
Sven



More information about the fpc-devel mailing list