>Really, I do not know if a standard exists, valid in every country around the 
>world.
>
>For example, in Italy (where I am) the last change was last sunday in october,
>and always at 3:00 AM, not 2:00 AM.
>
>Thanks for any help.

That is not a problem is you want to calculate this yourself. All you need to do
is abstract the problem. Instead of using two specific rules, write code that
handles two abstract rules, like:

Specific rule: 2nd Sunday in March at 2:00 AM, add one hour.
Abstract rule: Nth DayOfWeek in Month at TimeToChange add TimeOffset

By abstracting the first rule, you can see that we really only need one abstract
rule format to handle both the spring and fall time changes because
TimeOffset can be a negative or positive number.

Obviously, Windows is storing abstract information like this somewhere
in order to accomplish the automatic time change. AFAIK, it is not documented
and therefore cannot be relied upon. The registry is a good guess, but since
you can't rely on it, you are better off handling the issue yourself.

Glenn Lawler
www.incodesystems.com

-----Original Message-----
From:   mauro russo [SMTP:[email protected]]
Sent:   Tuesday, November 10, 2009 4:26 AM
To:     [email protected]
Subject:        Re: [delphi-en] conversions between UTC and local time

Really, I do not know if a standard exists, valid in every country around the 
world.

For example, in Italy (where I am) the last change was last sunday in october,
and always at 3:00 AM, not 2:00 AM.

Thanks for any help.


  ----- Original Message ----- 
  From: Glenn B. Lawler 
  To: '[email protected]' 
  Sent: Monday, November 09, 2009 10:43 PM
  Subject: RE: [delphi-en] conversions between UTC and local time


    
  Mauro,

  >is there at least some API giving the "next time" there will be a change on 
local time
  >with respect UTC?

  Why not just calculate the dates yourself? The rules have changed over the 
years,
  AFAIK, the current rules are:

  1. 2nd Sunday in March at 2:00 AM, add one hour.

  2. 1st Sunday in November at 2:00 AM, subtract one hour.

  There are a number of ways to calculate the next date based on these rules.

  Check the Delphi help on EncodeDate, DecodeDate, and
  DayOfWeek.

  The TDateTime type is a double (floating point) number. The
  integral part is the number of days since a particular reference
  date (+/-) and the fractional part is the fraction of a day to
  represent the time. We don't need the time for this problem.

  Think about the simplest approach you could use to manually
  determine the date of the Nth day of the week in a given month.

  Write a function that returns the date of the next daylight change
  given a starting date.

  Let us know if you need help on the particulars of implementing
  this. While this problem may seem difficult at first, the way to
  deal with it (or any other non-trivial problem) is to break it down
  into simpler steps which can individually be solved easily.

  Glenn Lawler
  www.incodesystems.com

  -----Original Message-----
  From: mauro russo [SMTP:[email protected]]
  Sent: Monday, November 09, 2009 1:48 PM
  To: [email protected]
  Subject: Re: [delphi-en] conversions between UTC and local time

  Dear,

  is there at least some API giving the "next time" there will be a change on 
local time
  with respect UTC?

  ----- Original Message ----- 
  From: Rob Kennedy 
  To: [email protected] 
  Sent: Tuesday, October 27, 2009 3:31 PM
  Subject: Re: [delphi-en] conversions between UTC and local time

  mauro russo wrote:
  > Dear all,
  > 
  > I am using the following function in order to obtain the bias between local 
time and UTC:
  > 
  > 
  > function GetTimeZoneBias_min(): Integer;
  > var tz: TTimeZoneInformation;
  > begin
  > case GetTimeZoneInformation(tz) of
  > TIME_ZONE_ID_STANDARD: Result := -(tz.StandardBias + tz.Bias);
  > TIME_ZONE_ID_DAYLIGHT: Result := -(tz.DaylightBias + tz.Bias);
  > else
  > Result := 0;
  > end;
  > end;
  > 
  > 
  > and I use the result Res in the formula: locla_time = UTC + Res.
  > 
  > 
  > 
  > Now, I would like to obtain the bias not at the current time, but according 
to a given UTC value.
  > 
  > For example, now UTC is 9:47 at the 27th of october,
  > but how to obtain the bias when UTC was, for example, 8:35 at the 5th of 
july?

  If the StandardDate and DaylightDate members of TTimeZoneInformation 
  don't have what you need, then Windows does not have what you need.

  -- 
  Rob

Reply via email to