Home | History | Annotate | Line # | Download | only in time
      1 # Generate the 'leapseconds' file from 'leap-seconds.list'.
      2 
      3 # This file is in the public domain.
      4 
      5 BEGIN {
      6   print "# Allowance for leapseconds added to each timezone 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 "# For more about leap-seconds.list, please see"
     15   print "# The NTP Timescale and Leap Seconds"
     16   print "# <http://www.eecis.udel.edu/~mills/leap.html>."
     17   print ""
     18   print "# The International Earth Rotation Service periodically uses leap seconds"
     19   print "# to keep UTC to within 0.9 s of UT1"
     20   print "# (which measures the true angular orientation of the earth in space); see"
     21   print "# Terry J Quinn, The BIPM and the accurate measure of time,"
     22   print "# Proc IEEE 79, 7 (July 1991), 894-905 <http://dx.doi.org/10.1109/5.84965>."
     23   print "# There were no leap seconds before 1972, because the official mechanism"
     24   print "# accounting for the discrepancy between atomic time and the earth's rotation"
     25   print "# did not exist until the early 1970s."
     26   print ""
     27   print "# The correction (+ or -) is made at the given time, so lines"
     28   print "# will typically look like:"
     29   print "#	Leap	YEAR	MON	DAY	23:59:60	+	R/S"
     30   print "# or"
     31   print "#	Leap	YEAR	MON	DAY	23:59:59	-	R/S"
     32   print ""
     33   print "# If the leapsecond is Rolling (R) the given time is local time."
     34   print "# If the leapsecond is Stationary (S) the given time is UTC."
     35   print ""
     36   print "# Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S"
     37 }
     38 
     39 /^ *$/ { next }
     40 /^#/ { next }
     41 
     42 {
     43     NTP_timestamp = $1
     44     TAI_minus_UTC = $2
     45     hash_mark = $3
     46     one = $4
     47     month = $5
     48     year = $6
     49     if (old_TAI_minus_UTC) {
     50 	if (old_TAI_minus_UTC < TAI_minus_UTC) {
     51 	    sign = "23:59:60\t+"
     52 	} else {
     53 	    sign = "23:59:59\t-"
     54 	}
     55 	if (month == "Jan") {
     56 	    year--;
     57 	    month = "Dec";
     58 	    day = 31
     59 	} else if (month == "Jul") {
     60 	    month = "Jun";
     61 	    day = 30
     62 	}
     63 	printf "Leap\t%s\t%s\t%s\t%s\tS\n", year, month, day, sign
     64     }
     65     old_TAI_minus_UTC = TAI_minus_UTC
     66 }
     67