[PROPOSED] Improve leapseconds support
(Inspired by a suggestion from Chris Woodbury.) * NEWS, leapseconds.awk: Add support for leap seconds at the ends of months other than June and December. --- NEWS | 5 +++-- leapseconds.awk | 34 +++++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index e9f5366..9780cc8 100644 --- a/NEWS +++ b/NEWS @@ -86,8 +86,9 @@ Unreleased, experimental changes transition (or for all time stamps if there are no transitions), just as DST strings specifying DST have always done. - leapseconds.awk now outputs "#updated" and "#expires" comments. - (Inspired by a suggestion from Chris Woodbury.) + leapseconds.awk now outputs "#updated" and "#expires" comments, + and supports leap seconds at the ends of months other than June + and December. (Inspired by suggestions from Chris Woodbury.) Changes to documentation diff --git a/leapseconds.awk b/leapseconds.awk index 6b069b3..ea0567c 100644 --- a/leapseconds.awk +++ b/leapseconds.awk @@ -35,9 +35,25 @@ BEGIN { print "# Leap YEAR MON DAY 23:59:59 - R/S" print "" print "# If the leap second is Rolling (R) the given time is local time (unused here)." - print "# If the leap second is Stationary (S) the given time is UTC." - print "" - print "# Leap YEAR MONTH DAY HH:MM:SS CORR R/S" + + monthabbr[ 1] = "Jan" + monthabbr[ 2] = "Feb" + monthabbr[ 3] = "Mar" + monthabbr[ 4] = "Apr" + monthabbr[ 5] = "May" + monthabbr[ 6] = "Jun" + monthabbr[ 7] = "Jul" + monthabbr[ 8] = "Aug" + monthabbr[ 9] = "Sep" + monthabbr[10] = "Oct" + monthabbr[11] = "Nov" + monthabbr[12] = "Dec" + for (i in monthabbr) { + monthnum[monthabbr[i]] = i + monthlen[i] = 31 + } + monthlen[2] = 28 + monthlen[4] = monthlen[6] = monthlen[9] = monthlen[11] = 30 } /^#\tUpdated through/ || /^#\tFile expires on:/ { @@ -62,14 +78,14 @@ BEGIN { } else { sign = "23:59:59\t-" } - if (month == "Jan") { + m = monthnum[month] - 1 + if (m == 0) { year--; - month = "Dec"; - day = 31 - } else if (month == "Jul") { - month = "Jun"; - day = 30 + m = 12 } + month = monthabbr[m] + day = monthlen[m] + day += m == 2 && year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) printf "Leap\t%s\t%s\t%s\t%s\tS\n", year, month, day, sign } old_TAI_minus_UTC = TAI_minus_UTC -- 2.17.1
participants (1)
-
Paul Eggert