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