[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