Guy Harris wrote:
the correct POSIX TZ setting for Iran, at least as I read the SUS, would be "<+0330>-3:30<+0430>,J81/0,J265/0"
As I mentioned in my previous email, there is no POSIX TZ setting for Iran because its DST changes don't follow the Gregorian calendar. The string at the end of the Asia/Tehran file is just an approximation. As near as I can tell, the string "<+0330>-3:30<+0430>,J80/0,J264/0" at the end of the Asia/Tehran file has the same behavior as the approximation that the "asia" file uses for far-future timestamps in Asia/Tehran. So we should be OK here.
omitting the "J" is not even valid for January and February,
I don't see why not. POSIX says that omitting the J makes it possible to specify February 29, so clearly omitting the J is valid for pre-March dates.
zic should probably either:
... always put the "J" in
But always putting the "J" in, even when not needed, adds a byte to the output file for rules in January and February.
or
go with 0-based Julian days
That wouldn't be useful for dates after February, as tzdb Rule lines for those dates never correspond to 0-based Julian days.