SOI TN 94-116
R S Bogart
1994.06.30_15:59:60_PST
N.B. This document has been superseded by JSOC TN-07-001
Physically, data of type SDS_TIME are to be taken as representing in double-precision floating point format, the elapsed time measured in Système International (SI) seconds from a standard epoch. The epoch is chosen as the instant at which the year 1977 as recorded under Temps Atomique International (TAI) began: 00:00:00.0 on Jan 1, 1977 (TAI). This epoch is selected because it is the epoch used by the IAU for the definition of dynamical time (used by the Astronomical Almanac and by NASA).
Representation of times as IEEE double-precision numbers provides a relative numeric precision of 2 * 10-16, which is roughly two orders of magnitude better than the estimated accuracy of atomic clocks; it should thus be adequate for representation of all absolute times. For times within about 36 years of the epoch (1941 < year < 2013), that translates to an absolute accuracy of 0.1 usec. It also allows for an absolute accuracy of 27 sec for all times in the age of the solar system (± 4.5 Gyr). If greater accuracy is required, for example in the measurements of elapsed time, then we suggest using type SDS_DOUBLE to represent elapsed times referred to an arbitrary epoch; if the epoch is within one day of the time specified, then time intervals can be thus expressed to an accuracy of 26 psec (0.6 cm).
TDT differs from TAI by a variable amount, but for times of interest the difference is within 10 usec of its exact value at the 1977.0 TAI epoch of 32.184 sec = 0.0003725 day. For our purposes we will define TT = TAI + 32.184 sec.
The correspondence between Coordinated Universal Time (UTC), upon which all civil times are based, and TAI is even more complicated. Since 1972, it has been based on intercalation of whole seconds immediately prior to the commencement of Jan. 1 or Jul. 1 at intervals selected so that the accumulated difference between observed Universal Time (UT1) and UTC does not exceed 0.9 second at the time of intercalation. In principle seconds can be intercalated (or dropped) at the quarters of the year as well. Since the adjustment is based on observations and since the rotation rate of the Earth is not constant, it is not possible to predict with absolute accuracy when future adjustments will have to be made (also, there is no fixed formula for deciding when to intercalate). Furthermore, prior to 1972, the adjustments were made more frequently and the allowed accumulated differences were much smaller. For our purposes, however, it should be sufficient to use a fictitious UTC based on past projection of the present formula for intercalation. Adjustment dates should be made according to table 1. Prior to 1960.0 there should be no difference between TAI and UTC. I don't know what to do about dates after 2005.0. Neglecting secular deceleration of the Earth it is clear that the present rate is consistent with an average correction rate of one second per year. It is best when referring to both future times and times in the distant past to use dynamical or atomic time.
Two alternative forms are available for full specification of a time. One uses the Julian Day number or modified Julian Day number and fraction to represent the time as a virtual floating-point number (although not the internal number); the other specifies the time in customary calendar date / time of day format.
A fully specified time in the Julian Day notation is of the form:
{MJD|JD}_X[.Y][_{TAI|TT|TDT|UT|UTC}]
The notation is that square brackets [] enclose optional fields, braces {} enclose sets of alternative symbols which are separated by vertical bars |, and the characters X and Y are to be replaced by numeric values representing respectively the day number and the fraction of a day, where a day is 86400 TAI seconds except when the time scale is Universal Time and the day happens to be one in which a leap second occurs. I don't know what to do about that case.
The initial string designates whether the day number X, the integer part of the real number, is a Julian Day or a Modified Julian Day. The optional string at the end specifies which time scale is referred to. The default is that Terrestrial Time (TT or TDT) is assumed. Thus the following forms are all valid as Julian Day representations of the same time:
JD_2450000
JD_2450000.25_TT
JD_2450000.2496275_TAI
MJD_49999.75_TDT
Note that TAI and TT are the only sensible time scales to use with this representation, as they are the only ones in which a day is always equal to 86,400 seconds (by definition).
A fully specified time in the Calendar Date / Time of Day notation is of the form:
{YYYY|YY}.{L|R|nnn}.D[{.X|_HH:MM[:SS[.Y]]}[_{TAI|TT|TDT|UT|UTC|zone}]]
In this notation, the initial two- or four-digit integer represents the year number of the Common Era (ce or AD). Negative integers are used for dates before the Common Era (BC) despite the fact that there is no year 0. If the year number is a two digit number greater than 9, it should be interpreted as the year number minus 1900; two digit numbers less than 10 should be interpreted as the year number minus 2000. Years earlier than 1000 AD should be expressed as four-digit integers with leading zeroes.
The second field represents the month number or name. It is either an integer in the range [1, 12], the Roman numeral for such an integer, or a three-letter designation for the month consisting of the the first three letters of its English name. (The Roman numeral and the three-letter designation can be in any combination of upper and lower case). Leading zeroes in the integer representation are optional.
The third field is the day number of the month, an integer. The use of day numbers less than 1 or greater than the length of the month should be discouraged, as in certain cases it can lead to erroneous results.
The fourth field of the date can be either an integer representing the fraction of the 86,400 second TAI day or a composite field for the clock time of day. As before, the use of fractional day designations with time scales other than TAI or TT should be avoided. The clock time is expressed in the customary colon-separated fields, with an optional decimal point and fractional part of a second. Note that the third (second) field of the clock time itself is optional (but not the second (minute) field); if absent it is assumed to be 0. Leading zeroes to make each integer field two-digits long are encouraged but not required. Times should be expressed in 24-hour time, not 12-hour meridian time. On days when leap seconds occur in time scales based on earth rotation (UT and civil time), the extra second should be expressed as time 23:59:60. For this reason, the use of hour, minute, and second numbers beyond the normal range ([0,23], [0,59], and [0,59] or [0,60]) should be avoided. If the fourth field is absent its value is assumed to be 0 (or 00:00:00.0).
The final (optional) field, beginning with an underscore ("_"), is a string designating the time scale. Upper-case characters are preferred but not required. If the time scale designation is not provided, the default is to interpret the date time as in Universal Time (UT, UTC). If zone time is used, no check for agreement with civil time is implied; the date-time 1995.07.27_12:00:00_MST is valid and refers to the same instant regardless of whether the event referred to (if any) occurs in Colorado, Arizona, or Sonora. Valid values for the zone time string are listed in Table 2. The following strings should all be valid representations of the same time:
1995.10.09_18:00:00
1995.X.09_18:00:00.0_UT
1995.10.09_18:00:29.0_TAI
1995.10.09_18:01:01.184_TT
95.Oct.9.7500_Z
1995.10.09_10:00:00_PST
It should be noted that these formats are not consistent with the ANSI and ISO standards for representation of date and time of day. In the event that dates and times in standard formats are encountered, we should be prepared to translate them. In particular all-numeric and hyphen separated strings, commas used for the decimal point, and civil time differentials, of the forms
19951009-180000
1995-10-09-18-00-00,0
19951009200000+0200
could all be employed consistent with standards. These should be handled as needed. (The same remark applies to civil time designations and alphabetic and Roman numeral month designators; their use should be discouraged.)
In calendric calculations, the Gregorian reckoning (400 years = 146097 days) is to be used for all dates on or after 1582.10.15.0 = JD_2299160.5. For all dates prior to this the proleptic Julian reckoning (4 years = 1461 days) is to be used. The second immediately preceeding JD_2299160.5 is designated 1582.10.04_23:59:59.
Designation of times with time differential notation (e.g. 95.1.1_142350+0500) is not included in this revision. Neither is representation by Carrington times or longitudes, e.g. CR_1336.59 or CL_1337.184.
It should be noted that these notes apply exclusively to the reprentations of dates and times within the SOI analysis environment, as for example in module argument lists. FITS does not recognize a data type of type "Time" for either data or data attributes. The FITS standard does reserve certain keywords for the representation of loosely-defined dates (days only) as character strings (e.g. DATE-OBS) , and of reference times as floating-point numbers (e.g. EPOCH). CDF does define an "EPOCH" data type similar to the present definition, but also loosely defined in terms of the reference calendar and time scale. The standard representation for EPOCH data types in CDF,
9-Oct-1995 10:00:00.000
is unsuitable for SOI environment use because of the embedded space and because of the lack of flexibility in specifying the time scale. When encoded in external data representations, SDS_TIME data must be encoded as character strings, with information on their appropriate parsing as dates and times based on registration of the relevant keywords as being of type SDS_TIME. This only applies to data attributes. Data values themselves are of course represented as double-precision numbers.
For the sake of preserving time representation information, it may be necessary to set up a pair of reserved keywords for the project:
1959.12.31_23:59:60_UTC = 1960.01.01_00:00:00_TAI
1960.01.01_00:00:00_UTC = 1960.01.01_00:00:01_TAI
1962.07.01_00:00:00_UTC = 1962.07.01_00:00:02_TAI
1964.07.01_00:00:00_UTC = 1964.07.01_00:00:03_TAI
1965.07.01_00:00:00_UTC = 1965.07.01_00:00:04_TAI
1966.07.01_00:00:00_UTC = 1966.07.01_00:00:05_TAI
1968.01.01_00:00:00_UTC = 1968.01.01_00:00:06_TAI
1969.01.01_00:00:00_UTC = 1969.01.01_00:00:07_TAI
1970.01.01_00:00:00_UTC = 1970.01.01_00:00:08_TAI
1971.01.01_00:00:00_UTC = 1971.01.01_00:00:09_TAI
1972.07.01_00:00:00_UTC = 1972.07.01_00:00:11_TAI
1973.01.01_00:00:00_UTC = 1973.01.01_00:00:12_TAI
1974.01.01_00:00:00_UTC = 1974.01.01_00:00:13_TAI
1975.01.01_00:00:00_UTC = 1975.01.01_00:00:14_TAI
1976.01.01_00:00:00_UTC = 1976.01.01_00:00:15_TAI
1977.01.01_00:00:00_UTC = 1977.01.01_00:00:16_TAI
1978.01.01_00:00:00_UTC = 1978.01.01_00:00:17_TAI
1979.01.01_00:00:00_UTC = 1979.01.01_00:00:18_TAI
1980.01.01_00:00:00_UTC = 1980.01.01_00:00:19_TAI
1981.07.01_00:00:00_UTC = 1981.07.01_00:00:20_TAI
1982.07.01_00:00:00_UTC = 1982.07.01_00:00:21_TAI
1983.07.01_00:00:00_UTC = 1983.07.01_00:00:22_TAI
1985.07.01_00:00:00_UTC = 1985.07.01_00:00:23_TAI
1988.01.01_00:00:00_UTC = 1988.01.01_00:00:24_TAI
1990.01.01_00:00:00_UTC = 1990.01.01_00:00:25_TAI
1991.01.01_00:00:00_UTC = 1991.01.01_00:00:26_TAI
1992.07.01_00:00:00_UTC = 1992.07.01_00:00:27_TAI
1993.07.01_00:00:00_UTC = 1993.07.01_00:00:28_TAI
1994.07.01_00:00:00_UTC = 1994.07.01_00:00:29_TAI
1997.01.01_00:00:00_UTC = 1997.01.01_00:00:31_TAI
1998.01.01_00:00:00_UTC = 1998.01.01_00:00:32_TAI
1999.01.01_00:00:00_UTC = 1999.01.01_00:00:33_TAI
2000.01.01_00:00:00_UTC = 2000.01.01_00:00:34_TAI
2001.01.01_00:00:00_UTC = 2001.01.01_00:00:35_TAI
2002.01.01_00:00:00_UTC = 2002.01.01_00:00:36_TAI
2003.01.01_00:00:00_UTC = 2003.01.01_00:00:37_TAI
2004.01.01_00:00:00_UTC = 2004.01.01_00:00:38_TAI
2005.01.01_00:00:00_UTC = 2005.01.01_00:00:39_TAI
Abbrev. Zone (UTC) Abbrev. Zone (UTC) Abbrev. Zone (UTC) U, PST, YDT -8 Z, GMT, WET 0 H, SST, WST 8 T, MST, PDT -7 A, CET, BST 1 I, JST 9 S, CST, MDT -6 B, EET 2 K, JDT 10 R, EST, CDT -5 C 3 L 11 Q, AST, EDT -4 D 4 M, NZST 12 P, ADT -3 E 5 X, BST -11 O -2 F 6 W, HST, BDT -10 N -1 G 7 V, YST, HDT -9 NZDT 13 Y -12
ANSI standard X3.43-1986: Representations of local time of day for information interchange. 1985-06-23
ANSI standard X3.51-1986: Representations of universal time, local time differentials, and United States time zone references for information interchange. 1986-06-23
Explanatory Supplement to the Astronomical Almanac, ed. K. Seidelmann, 1992.
ISO standard 2014: Writing of calendar dates in all-numeric form. 1976-04-01
ISO standard 3307: Information interchange - Representation of time of the day. 1975-03-15
ISO standard 4031: Information interchange - Representation of local time differentials. 1978-12-15
McCarthy, D.M., US Naval Observatory, private communication.
NOST Standard 100-1.0: Definition of the Flexible Image Transport System (FITS)
NSSDC: CDF Users Guide, Version 2.4, 1994.