[windev] Calculating DST switch moments of many future years
Serge Wautier
serge at wautier.net
Thu Mar 26 11:54:59 GMT 2009
> every year since the inception of DST, new years day has fallen within
> DST, and the first day of June under standard time.
Even in the southern hemisphere?
Serge.
http://www.apptranslator.com
> -----Original Message-----
> From: windev-bounces at windev.org [mailto:windev-bounces at windev.org] On
> Behalf Of Mark McGinty
> Sent: jeudi 26 mars 2009 12:43
> To: 'Goran Pusic'; windev at windev.org
> Subject: Re: [windev] Calculating DST switch moments of many future
> years
>
>
>
> > -----Original Message-----
> > From: windev-bounces at windev.org
> > [mailto:windev-bounces at windev.org] On Behalf Of Goran Pusic
> > Sent: Thursday, March 26, 2009 2:29 AM
> > To: windev at windev.org
> > Subject: [windev] Calculating DST switch moments of many future years
> >
> >
> > Hi all!
> >
> > I need to calculate UTC moment for DST switches for a given
> > time zone (perhaps different from system's time zone), for a
> > couple of decades in advance. (If it sounds like a WTF: this
> > info is sent to an embedded system to help it know about it's
> > timezone bias at every moment in time, for as long as it will
> > live, so that it can calculate local time).
>
> Was the code written to apply the new DST rules for dates in 2007 and
> later?
> If not your couple decades worth of data generated in advance contains
> flaws.
>
> My approach to converting to UTC was this:
>
> 1. Get tz bias for a given zone for 2 dates, each of which is
> definitively
> in std time, and DST, respectively. 01 Jan and 01 June work nicely,
> for
> every year since the inception of DST, new years day has fallen within
> DST,
> and the first day of June under standard time. This gives you both
> standard
> bias and DST bias that are guaranteed correct for a given time zone.
>
> 2. Then I determine whether the date in question fell within DST, using
> the
> rules that applied to the year in which the date occurred, which in
> turn
> determines which of the two bias values [acquired in step 1] is the
> correct
> one to apply.
>
>
> Start of DTC:
>
> USA:
> Year <= 2006:
> Month = 4
> Day = (2 + 6 * Year - (short)(Year / 4)) % 7 + 1
>
> 2007 and after:
> Month = 3
> Day = 14 - ((short)(1 + Year * 5 / 4) % 7)
>
> Europe:
> Month = 3
> Day = (31 - ((short)(Year * 5 / 4) + 4) % 7)
>
>
> End of DTC:
>
> USA:
> Year <= 2006:
> Month = 10
> Day = (31 - (short)(Year * 5 / 4) + 1) % 7)
>
> 2007 and after:
> Month = 11
> Day = 7 - (short)(1 + Year * 5 / 4) % 7)
>
> Europe (same as USA prior to 2007):
> Month = 10
> Day = (31 - (short)(Year * 5 / 4) + 1) % 7)
>
>
> In your case you could calc those 4 values once for each year you were
> going
> to generate, and cache them in an array or something.
>
>
> -MM
>
>
>
> > For that, I have a calculation that relies on Windows
> > TIME_ZONE_INFORMATION and friends. However, recently (after
> > some 5-6 years after the code was written), people found out
> > there are bugs inside my calculation :-( .
> >
> > Now... Before I delve into this again (it's not urgent, it's
> > for next autumn ;-) ), do you guys have any pointers on how
> > to do it? Did anyone do it before?
> >
> > HTH,
> > Goran.
> >
> > P.S.
> >
> > Yes, I know that DST rules change, so calculation may be good
> > now, but bad in the future. Nothing I can do about that, it's
> > on shoulders of users.
> >
> > P.P.S Hi, Serge W! Remember this? (Bug is mine, though)
> >
> >
> >
> >
> > --
> > Windev mailing list at Windev at windev.org
> >
> > Lost your password? Need to unsubscribe or change your
> > delivery options?
> > Go to http://lists.windev.org/mailman/listinfo/windev
> > --
> > Search the Windev Archives - www.windev.org
> >
>
> --
> Windev mailing list at Windev at windev.org
>
> Lost your password? Need to unsubscribe or change your delivery
> options?
> Go to http://lists.windev.org/mailman/listinfo/windev
> --
> Search the Windev Archives - www.windev.org
More information about the Windev
mailing list