[tz] If leap seconds go away, should TZif leap-second tables expire?

Paul Eggert eggert at cs.ucla.edu
Wed Nov 29 07:31:18 UTC 2023


I have a question about leap-second table expiration in TZif files. 
Please bear with a longish explanation first; the actual question is at 
the end of this message.

Since release 2020a, TZDB's zic command has supported "Expires" lines in 
the leapseconds file, and has propagated that info to TZif files using 
an extension to Internet RFC 8536. This extension is a bit of a hack: if 
a TZif file's last leap-second record has the same correction as the 
penultimate record, then the last record is the leap second expiry. For 
example, if the file 'leap-seconds.list' contains the line:

   #@      3928521600

which stands for 28 June 2024; and if you run the command 'make 
EXPIRES_LINE=1 leapseconds', the file 'leapseconds' will contain:

   Expires 2024   Jun     28      00:00:00

and if you then run 'make install', the resulting TZif files with leap 
seconds will contain two leap transitions with correction 27, one 
transition for 1483228826 (representing 2016-12-31 23:59:60 UTC, the 
most recent leap second), and one transition for 1719532827 
(representing 2017-06-28 00:00:00 UTC, the leap second table expiration).

This Expires-line feature was introduced to TZDB in release 2020a, 
replacing an older hack using an "#expires" comment. However, in the 
interest of stability the feature has been disabled by default and you 
must use a non-default setting like "make EXPIRES_LINE=1" to enable it.

Our current draft -09 revision to Internet RFC 8536 documents this new 
feature for the planned version 4 of the TZif file. See 
<https://datatracker.ietf.org/doc/draft-murchison-rfc8536bis/09/> 
section 3.2 item "corr(ection)", which says:

   "... in version 4 files with two or more leap-second
    records, the correction value of the last two records
    MAY be the same, with the occurrence of last record indicating
    the expiration time of the leap-second table."

   "The leap-second table expiration time is the time at which the
    table no longer records the presence or absence of future leap-
    second corrections, and post-expiration timestamps can not be
    accurately calculated.  For example, a leap-second table
    published in January, which predicts the presence or absence of
    a leap second at June's end, might expire in mid-December
    because it is not known whether a leap second will occur at
    December's end.

To complicate matters, a year ago the General Conference on Weights and 
Measures adopted a resolution calling for leap seconds to be phased out 
by 2035 <https://www.bipm.org/en/cgpm-2022/resolution-4>. If this is 
indeed done as late as possible there's a chance we could have our 
first-ever negative leap second before 2035 
<https://insidegnss.com/will-we-have-a-negative-leap-second/> which 
could cause software havoc, and it's not clear whether the authorities 
would go through with this. One more thing: the World Radio Conference 
is currently meeting in Dubai and this meeting may take further action 
regarding leap seconds.

Draft -09 currently has the following text about the possible impending 
demise of leap seconds:

   "If leap seconds become permanently discontinued, as requested
    by the General Conference on Weights and Measures
    [CGPM-2022-R4], leap-second tables published after the
    discontinuation time SHOULD NOT expire, since they will not be
    updated in the foreseeable future."


With all the above in mind, here is my question.

Should TZif leap-second tables have no expiration date if leap seconds 
are discontinued, as draft -09 suggests? Or should they have an 
expiration date of (say) January 2100, which is likely a lower bound on 
the date that the leap-second regime would be replaced by some other 
regime, such as leap minutes? Or should we do something else about TZif 
leap-second expiry after leap seconds are discontinued?


More information about the tz mailing list