Module: IERS::TAI

Defined in:
lib/iers/tai.rb

Class Method Summary collapse

Class Method Details

.tai_to_utc(input = nil, jd: nil, mjd: nil) ⇒ Float

Convert a TAI instant to UTC.

Uses the TAI instant for an initial leap second lookup, then verifies the offset at the derived UTC. If TAI and UTC straddle a leap second boundary the first lookup may be off by one second; the verification step corrects this exactly.

Parameters:

  • input (Time, Date, DateTime, nil) (defaults to: nil)
  • jd (Float, nil) (defaults to: nil)

    Julian Date

  • mjd (Float, nil) (defaults to: nil)

    Modified Julian Date

Returns:

  • (Float)

    Modified Julian Date in UTC scale

Raises:



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/iers/tai.rb', line 32

def tai_to_utc(input = nil, jd: nil, mjd: nil)
  tai_mjd = TimeScale.to_mjd(input, jd: jd, mjd: mjd)

  initial_offset = LeapSecond.at(mjd: tai_mjd)
  utc_mjd = tai_mjd - initial_offset / TimeScale::SECONDS_PER_DAY

  verified_offset = LeapSecond.at(mjd: utc_mjd)
  return utc_mjd if verified_offset == initial_offset

  tai_mjd - verified_offset / TimeScale::SECONDS_PER_DAY
end

.utc_to_tai(input = nil, jd: nil, mjd: nil) ⇒ Float

Convert a UTC instant to TAI.

Parameters:

  • input (Time, Date, DateTime, nil) (defaults to: nil)
  • jd (Float, nil) (defaults to: nil)

    Julian Date

  • mjd (Float, nil) (defaults to: nil)

    Modified Julian Date

Returns:

  • (Float)

    Modified Julian Date in TAI scale

Raises:



14
15
16
17
18
# File 'lib/iers/tai.rb', line 14

def utc_to_tai(input = nil, jd: nil, mjd: nil)
  utc_mjd = TimeScale.to_mjd(input, jd: jd, mjd: mjd)
  tai_utc = LeapSecond.at(mjd: utc_mjd)
  utc_mjd + tai_utc / TimeScale::SECONDS_PER_DAY
end