Time::TAI - International Atomic Time and realisations


        use Time::TAI qw(tai_instant_to_mjd tai_mjd_to_instant);

        $mjd = tai_instant_to_mjd($instant);
        $instant = tai_mjd_to_instant($mjd);

        use Time::TAI qw(tai_realisation);

        $rln = tai_realisation("npl");
        $instant = $rln->to_tai($npl_instant);


International Atomic Time (TAI) is a time scale produced by an ensemble of atomic clocks around Terra. It attempts to tick at the rate of proper time on the Terran geoid (i.e., at sea level), and thus is the principal realisation of Terrestrial Time (TT). It is the frequency standard underlying Coordinated Universal Time (UTC), and so is indirectly the basis for Terran civil timekeeping.

This module represents instants on the TAI time scale as a scalar number of TAI seconds since an epoch. This is an appropriate form for all manner of calculations. The TAI scale is defined with a well-known point at UT2 instant 1958-01-01T00:00:00.0 as calculated by the United States Naval Observatory. That instant is assigned the scalar value zero exactly, making it the epoch for this linear seconds count. This matches the convention used by Time::TT for instants on the TT scale.

There is also a conventional way to represent TAI instants using day-based notations associated with planetary rotation `time' scales. The `day' of TAI is a nominal period of exactly 86400 TAI seconds, which is slightly shorter than an actual Terran day. The well-known point at UT2 instant 1958-01-01T00:00:00.0 is assigned the label 1958-01-01T00:00:00.0 (MJD 36204.0). Because TAI is not connected to Terran rotation, and so has no inherent concept of a day, it is somewhat misleading to use such day-based notations. Conversion between this notation and the linear count of seconds is supported by this module. This notation does not match the similar day-based notation used for TT.

Because TAI is canonically defined only in retrospect, real-time time signals can only approximate it. To achieve microsecond accuracy it is necessary to take account of this process. This module supports conversion of times between different realisations of TAI.



Converts from a count of seconds to a Modified Julian Date in the manner conventional for TAI. The MJD can be further converted to other forms of day-based date using other modules. The input must be a Math::BigRat object, and the result is the same type.


Converts from a Modified Julian Date, interpreted in the manner conventional for TAI, to a count of seconds. The input must be a Math::BigRat object, and the result is the same type.


Looks up and returns an object representing a named realisation of TAI. The object returned is of the class Time::TT::Realisation; see the documentation of that class for its interface.

The name, recognised case-insensitively, may be of these forms:

"" (the empty string)

TAI itself, as defined retrospectively.


TAI(NPL), supplied in real time by the National Physical Laboratory in the UK. Other real-time estimates of TAI are named similarly using an abbreviation of the name of the supplying agency. The names recognised are:

    aos   cnm   ftz   inti  lt    nimb  nrc   pknm  smu   tug
    apl   cnmp  glo   ipq   lv    nimt  nrl   pl    snt   ua
    asmw  crl   gps   it    mike  nis   nrlm  psb   so    ume
    aus   csao  gum   jatc  mkeh  nist  ntsc  ptb   sp    usno
    bev   csir  hko   jv    msl   nmc   omh   rc    sta   vmi
    bim   dlr   ien   kim   nao   nmij  onba  roa   su    vsl
    birm  dmdm  ifag  kris  naom  nml   onrj  scl   tao   yuzm
    by    dpt   igma  ksri  naot  nmls  op    sg    tcc   za
    cao   dtag  igna  kz    nict  npl   orb   siq   tl    zipe
    ch    eim   inpl  lds   nim   npli  pel   smd   tp    zmdm

See Time::TT::Agencies for expansions of these abbreviations.

Some pairs of these names refer to the same time scale, due to renaming of the underlying agency or transfer of responsibility for a time scale. It is possible that some names that should be aliases are treated as separate time scales, due to uncertainty of this module's author; see "BUGS".

The relationships between these scales and TAI are defined by isolated data points, so conversions in general involve interpolation. The process is by its nature inexact.

Other names may be recognised in the future, as more TAI(k) time scales are defined.


For a few of the named realisations of TAI for which there is data, the author of this module was unable to determine conclusively whether they were renamed at some point. This affects particularly the names "naot", "snt", "sta", "tao".

Time scale data only goes back to the beginning of 1990. GPS and GLONASS data only goes back to the beginning of 1993, and forward to the end of 2004.

If you can supply more information about any of the time scales for which data is missing then please mail the author.

Time steps and frequency shifts are not noted in the time scale data available to this module. The smooth interpolation will therefore produce inaccurate results in the immediate vicinity of such discontinuities.


Date::JD, Time::GPS, Time::TAI::Now, Time::TT, Time::TT::Agencies, Time::TT::Realisation, Time::UTC


Andrew Main (Zefram) <>


Copyright (C) 2006, 2007, 2010 Andrew Main (Zefram) <>


This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.