I've been adding DST time zone to espurna (https://github.com/xoseperez/espurna/pull/1295).
All dst entries but asia/tehran, use Mm.n.d format to specify dst
dates.
The Tehran use 'Jn': "Asia/Tehran","<+0330>-3:30<+0430>,J80/0,J264/0"
When I implement this 'J' format, I came out a day short.
From https://en.wikipedia.org/wiki/Iran_Standard_Time:
The Iranian DST starts on March 22 and ends on September 22 each year with the exception of leapyears in which the DST starts and ends one day prior.
Year DST Start Date and Time DST End Date and Time 2014 Sat, Mar 22, 0:00 AM Mon, Sep 22, 0:00 AM 2015 Sun, Mar 22, 0:00 AM Tue, Sep 22, 0:00 AM 2016 Mon, Mar 21, 0:00 AM Wed, Sep 21, 0:00 AM 2017 Wed, Mar 22, 0:00 AM Fri, Sep 22, 0:00 AM 2018 Thu, Mar 22, 0:00 AM Sat, Sep 22, 0:00 AM
This mean Tehran should be "Asia/Tehran","<+0330>-3:30<+0430>,80/0,264/0". The 'n' format, which counts 29 Feb, and starts count from 0, so would not come up a day short on non-leap years.