1# Generate the 'leapseconds' file from 'leap-seconds.list'. 2 3# This file is in the public domain. 4 5BEGIN { 6 print "# Allowance for leap seconds added to each time zone file." 7 print "" 8 print "# This file is in the public domain." 9 print "" 10 print "# This file is generated automatically from the data in the public-domain" 11 print "# leap-seconds.list file available from most NIST time servers." 12 print "# If the URL <ftp://time.nist.gov/pub/leap-seconds.list> does not work," 13 print "# you should be able to pick up leap-seconds.list from a secondary NIST server." 14 print "# See <http://tf.nist.gov/tf-cgi/servers.cgi> for a list of secondary servers." 15 print "# For more about leap-seconds.list, please see" 16 print "# The NTP Timescale and Leap Seconds" 17 print "# http://www.eecis.udel.edu/~mills/leap.html" 18 print "" 19 print "# The International Earth Rotation and Reference Systems Service" 20 print "# periodically uses leap seconds to keep UTC to within 0.9 s of UT1" 21 print "# (which measures the true angular orientation of the earth in space); see" 22 print "# Terry J Quinn, The BIPM and the accurate measure of time," 23 print "# Proc IEEE 79, 7 (July 1991), 894-905 <http://dx.doi.org/10.1109/5.84965>." 24 print "# There were no leap seconds before 1972, because the official mechanism" 25 print "# accounting for the discrepancy between atomic time and the earth's rotation" 26 print "# did not exist until the early 1970s." 27 print "" 28 print "# The correction (+ or -) is made at the given time, so lines" 29 print "# will typically look like:" 30 print "# Leap YEAR MON DAY 23:59:60 + R/S" 31 print "# or" 32 print "# Leap YEAR MON DAY 23:59:59 - R/S" 33 print "" 34 print "# If the leapsecond is Rolling (R) the given time is local time." 35 print "# If the leapsecond is Stationary (S) the given time is UTC." 36 print "" 37 print "# Leap YEAR MONTH DAY HH:MM:SS CORR R/S" 38} 39 40/^ *$/ { next } 41 42/^#\tUpdated through/ || /^#\tFile expires on:/ { 43 last_lines = last_lines $0 "\n" 44} 45 46/^#/ { next } 47 48{ 49 NTP_timestamp = $1 50 TAI_minus_UTC = $2 51 hash_mark = $3 52 one = $4 53 month = $5 54 year = $6 55 if (old_TAI_minus_UTC) { 56 if (old_TAI_minus_UTC < TAI_minus_UTC) { 57 sign = "23:59:60\t+" 58 } else { 59 sign = "23:59:59\t-" 60 } 61 if (month == "Jan") { 62 year--; 63 month = "Dec"; 64 day = 31 65 } else if (month == "Jul") { 66 month = "Jun"; 67 day = 30 68 } 69 printf "Leap\t%s\t%s\t%s\t%s\tS\n", year, month, day, sign 70 } 71 old_TAI_minus_UTC = TAI_minus_UTC 72} 73 74END { 75 printf "\n%s", last_lines 76} 77