[tz] Precise meaning of FROM and TO in a rule

Tim Parenti tim at timtimeonline.com
Tue Jul 8 22:24:12 UTC 2014

```On 8 July 2014 02:00, Jon Skeet <skeet at pobox.com> wrote:

> The next part - and where I started - is which year that transition would
> be assumed to be in.

Again, I think the years themselves should be in the same
frame-of-reference as the months and days, for the same reason.  That is,
to apply a rule: For each year between FROM and TO, inclusive (which
matches TYPE), find the day-long span corresponding to the date specified
by month IN and date ON within that year, according to the
frame-of-reference (u/g/z/s/w/blank) specified in AT and the prior offset
of the zone; then, find the transition time specified by AT within that
span.

If you'll indulge me for a moment, my brain refused to explain this to
myself in a less silly way...

Consider the scattered Kingdom of Foo, which straddles the Prime Meridian:
Rule  Foo  2012  max  -  Jan  Sun>=1  1:00u  1  D
Rule  Foo  2012  max  -  Jul  Sun>=1  1:00u  0  S
Zone  A-Land  1:00  Foo  A%sT
Zone  B-Land  -3:00  Foo  B%sT

One would imagine that the rules should take effect throughout the Kingdom
simultaneously; that is, advance at 2012-01-01T01:00Z.  In A-Land, this is
Sun 1 Jan 2012 02:00 AST --> 03:00 ADT, but in B-Land, this is Sat 31 Dec
*2011* 22:00 BST --> 23:00 BDT.  It appears zic handles this correctly:

\$ zdump -vc 2012,2013 A-Land B-Land
...
A-Land  Sun Jan  1 00:59:59 2012 UT = Sun Jan  1 01:59:59 2012 AST isdst=0
A-Land  Sun Jan  1 01:00:00 2012 UT = Sun Jan  1 03:00:00 2012 ADT isdst=1
A-Land  Sun Jul  1 00:59:59 2012 UT = Sun Jul  1 02:59:59 2012 ADT isdst=1
A-Land  Sun Jul  1 01:00:00 2012 UT = Sun Jul  1 02:00:00 2012 AST isdst=0
...
B-Land  Sun Jan  1 00:59:59 2012 UT = Sat Dec 31 21:59:59 2011 BST isdst=0
B-Land  Sun Jan  1 01:00:00 2012 UT = Sat Dec 31 23:00:00 2011 BDT isdst=1
B-Land  Sun Jul  1 00:59:59 2012 UT = Sat Jun 30 22:59:59 2012 BDT isdst=1
B-Land  Sun Jul  1 01:00:00 2012 UT = Sat Jun 30 22:00:00 2012 BST isdst=0
...

A similar case could be made for the equally-dispersed Bar Empire, which
straddles the International Date Line:
Rule  Bar  2017  max  -  Jun  lastSun  14:00u  1  D
Rule  Bar  2017  max  -  Dec  lastSun  14:00u  0  S
Zone  X-Land  -11:00  Bar  X%sT
Zone  Y-Land  11:00  Bar  Y%sT

The transition to standard time should occur at 2017-12-31T14:00Z.  In
X-Land, Sun 31 Dec 2017 04:00 XDT --> 03:00 XST, but in Y-Land, Mon 1 Jan
*2018* 02:00 YDT --> 01:00 YST.

\$ zdump -vc 2017,2018 X-Land Y-Land
...
X-Land  Sun Jun 25 13:59:59 2017 UT = Sun Jun 25 02:59:59 2017 XST isdst=0
X-Land  Sun Jun 25 14:00:00 2017 UT = Sun Jun 25 04:00:00 2017 XDT isdst=1
X-Land  Sun Dec 31 13:59:59 2017 UT = Sun Dec 31 03:59:59 2017 XDT isdst=1
X-Land  Sun Dec 31 14:00:00 2017 UT = Sun Dec 31 03:00:00 2017 XST isdst=0
...
Y-Land  Sun Jun 25 13:59:59 2017 UT = Mon Jun 26 00:59:59 2017 YST isdst=0
Y-Land  Sun Jun 25 14:00:00 2017 UT = Mon Jun 26 02:00:00 2017 YDT isdst=1
Y-Land  Sun Dec 31 13:59:59 2017 UT = Mon Jan  1 01:59:59 2018 YDT isdst=1
Y-Land  Sun Dec 31 14:00:00 2017 UT = Mon Jan  1 01:00:00 2018 YST isdst=0
...

I agree these particular edge conditions are a bit ridiculous, and probably
should be avoided anyway if possible, but it would be good to document the
expected behavior here.  (The citizens of Foo and Bar, who simply live for
edge cases, will be grateful.  And I can be sure of that because they are,
thankfully, fictitious.)

--
Tim Parenti
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mm.icann.org/pipermail/tz/attachments/20140708/5344a341/attachment.html>
```