diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2021-03-06 10:51:54 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2021-03-06 10:51:54 -0800 |
commit | efac9ad4c45356aff7a12100083a0409369fcea3 (patch) | |
tree | c9edeb9ced6ce6fdf0de955b66ee9a8550885e5a | |
parent | 7e09da940cd4d9b2ce9621ac30cc2bad55ecde06 (diff) | |
download | tz-master.tar.gz |
No zic -L truncation due to leapseconds Expiresmaster
Problem reported by Ian Abbott in:
https://mm.icann.org/pipermail/tz/2021-March/029909.html
* NEWS: Explain the situation.
* zic.8: Remove note about truncation.
* zic.c (adjleap): Do not truncate hi_time.
-rw-r--r-- | NEWS | 11 | ||||
-rw-r--r-- | zic.8 | 3 | ||||
-rw-r--r-- | zic.c | 2 |
3 files changed, 11 insertions, 5 deletions
@@ -28,6 +28,17 @@ Unreleased, experimental changes This avoids races where a TZ setting would temporarily stop working while zic was installing a replacement file or link. + zic -L no longer omits the POSIX TZ string in its output. + Starting with 2020a, zic -L truncated its output according to the + "Expires" directive or "#expires" comment in the leapseconds file. + The resulting TZif files omitted daylight saving transitions after + the leap second table expired, which led to far less-accurate + predictions of times after the expiry. Although future timestamps + cannot be converted accurately in the presence of leap seconds, it + is more accurate to convert near-future timestamps with a few + seconds error than with an hour error, so zic -L no longer + truncates output in this way. + Fix bug that caused 'localtime' etc. to crash when TZ was set to a all-year DST string like "EST5EDT4,0/0,J365/25" that does not conform to POSIX but does conform to Internet RFC 8536. @@ -720,9 +720,6 @@ The and .B HH:MM:SS fields give the expiration timestamp in UTC for the leap second table; -.B zic -outputs this expiration timestamp by truncating the end of the output -file to the timestamp. If there is no expiration line, .B zic also accepts a comment @@ -3166,8 +3166,6 @@ adjleap(void) error(_("last Leap time does not precede Expires time")); exit(EXIT_FAILURE); } - if (leapexpires <= hi_time) - hi_time = leapexpires - 1; } } |