This is more of an awareness-raising post than anything else... the data here is very far in the past. While trying to validate Noda Time against zic, I came up against issues with data releases between 1993 and 1996 in Egypt/Cairo. It turns out that this is because the Egypt rule is duplicated in the asia file, and this affects things. As a smallish example, if you create a file called testzone like this: Rule Egypt 1900 only - Oct 1 0:00 0 -
Rule Egypt 1943 1945 - Nov 1 0:00 0 - Rule Egypt 1945 only - Apr 16 0:00 1:00 " DST" Rule Egypt 1957 only - May 10 0:00 1:00 " DST" Rule Egypt 1957 1958 - Oct 1 0:00 0 - Rule Egypt 1958 only - May 1 0:00 1:00 " DST" # Rule Egypt 1957 only - May 10 0:00 1:00 " DST"
# Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Cairo 2:05:00 - LMT 1900 Oct 2:00 Egypt EET%s
... then execute: $ zic -d . testzone && zdump -v -c 1955,1958 $PWD/Africa/Cairo You'll see output like this for the May 1957 transition: .../Africa/Cairo Thu May 9 21:59:59 1957 UT = Thu May 9 23:59:59 1957
EET isdst=0 gmtoff=7200 ...Africa/Cairo Thu May 9 22:00:00 1957 UT = Fri May 10 01:00:00 1957 EET DST isdst=1 gmtoff=10800
That looks okay - the transition is around midnight, as described. If, however, you uncomment that last "Rule" line above - which is an exact duplicate of the earlier one - you get: .../Africa/Cairo Thu May 9 20:59:59 1957 UT = Thu May 9 22:59:59 1957
EET isdst=0 gmtoff=7200 .../Africa/Cairo Thu May 9 21:00:00 1957 UT = Fri May 10 00:00:00 1957 EET DST isdst=1 gmtoff=10800
Now the transition is one hour earlier. As it happens, this duplicate rule doesn't make any difference to Noda Time - it still emits the first output. I *strongly suspect* that I shouldn't care about this - that situations with duplicate rules should be deemed out of scope for any implementation. However, if anyone can think of any good justification why an implementation *should* behave like zic in this case, I'd be really interested to hear it. (I'm not asking for zic to change here. It already emits a warning because the rule is defined in multiple files, and I think that's good enough.) Jon