Skip to main content
`Ctrl`+`K`

# TimeUnixTai

class astropy.time.TimeUnixTai(val1, val2, scale, precision, in_subfmt, out_subfmt, from_jd=False)

  Bases: `TimeUnix`

  Unix time (TAI): SI seconds elapsed since 1970-01-01 00:00:00 TAI (see caveats).

  This will generally differ from standard (UTC) Unix time by the cumulative integral number of leap seconds introduced into UTC since 1972-01-01 UTC plus the initial offset of 10 seconds at that date.

  This convention matches the definition of linux CLOCK_TAI (https://www.cl.cam.ac.uk/~mgk25/posix-clocks.html), and the Precision Time Protocol (https://en.wikipedia.org/wiki/Precision_Time_Protocol), which is also used by the White Rabbit protocol in High Energy Physics: https://white-rabbit.web.cern.ch.

  Caveats:

  - Before 1972, fractional adjustments to UTC were made, so the difference between `unix` and `unix_tai` time is no longer an integer.

  - Because of the fractional adjustments, to be very precise, `unix_tai` is the number of seconds since `1970-01-01 00:00:00 TAI` or equivalently `1969-12-31 23:59:51.999918 UTC`. The difference between TAI and UTC at that epoch was 8.000082 sec.

  - On the day of a positive leap second the difference between `unix` and `unix_tai` times increases linearly through the day by 1.0. See also the documentation for the `TimeUnix` class.

  - Negative leap seconds are possible, though none have been needed to date.

  Examples

      >>> # get the current offset between TAI and UTC
      >>> from astropy.time import Time
      >>> t = Time('2020-01-01', scale='utc')
      >>> t.unix_tai - t.unix
      np.float64(37.0)

      >>> # Before 1972, the offset between TAI and UTC was not integer
      >>> t = Time('1970-01-01', scale='utc')
      >>> t.unix_tai - t.unix
      np.float64(8.000082)

      >>> # Initial offset of 10 seconds in 1972
      >>> t = Time('1972-01-01', scale='utc')
      >>> t.unix_tai - t.unix
      np.float64(10.0)

  Attributes Summary

  `epoch` | Reference epoch time from which the time interval is measured.
  `epoch_format` |
  `epoch_scale` |
  `epoch_val` |
  `epoch_val2` |
  `in_subfmt` |
  `jd1` |
  `jd2` |
  `name` |
  `out_subfmt` |
  `precision` |
  `scale` | Time scale.
  `subfmts` |
  `unit` |
  `value` | Return time representation from internal jd1 and jd2.

  Methods Summary

  `fill_value`(subfmt) | Return a value corresponding to J2000 (2000-01-01 12:00:00) in this format.
  `set_jds`(val1, val2) | Initialize the internal jd1 and jd2 attributes given val1 and val2.
  `to_value`([parent]) | Return time representation from internal jd1 and jd2.

  Attributes Documentation

  epoch

    Reference epoch time from which the time interval is measured.

  epoch_format = 'iso'
  epoch_scale = 'tai'
  epoch_val = '1970-01-01 00:00:00'
  epoch_val2 = None
  in_subfmt
  jd1
  jd2
  name = 'unix_tai'
  out_subfmt
  precision
  scale

    Time scale.

  subfmts = (('float', <class 'numpy.float64'>, None, <ufunc 'add'>), ('long', <class 'numpy.longdouble'>, <function longdouble_to_twoval>, <function twoval_to_longdouble>), ('decimal', <class 'numpy.object_'>, <numpy.vectorize object>, <numpy.vectorize object>), ('str', <class 'numpy.str_'>, <numpy.vectorize object>, <numpy.vectorize object>), ('bytes', <class 'numpy.bytes_'>, <numpy.vectorize object>, <numpy.vectorize object>))
  unit = 1.1574074074074073e-05
  value

  Methods Documentation

  classmethod fill_value(subfmt)

    Return a value corresponding to J2000 (2000-01-01 12:00:00) in this format.

    This is used as a fill value for masked arrays to ensure that any ERFA operations on the masked array will not fail due to the masked value.

  set_jds(val1, val2)

    Initialize the internal jd1 and jd2 attributes given val1 and val2. For an TimeFromEpoch subclass like TimeUnix these will be floats giving the effective seconds since an epoch time (e.g. 1970-01-01 00:00:00).

  to_value(parent=None, **kwargs)

    Return time representation from internal jd1 and jd2. Subclasses that require `parent` or to adjust the jds should override this method.