Time systems
Time handling is critical for precise ephemerides. rust-ephem uses:
UTC for external times passed from Python
TT (Terrestrial Time) internally for some ERFA routines
TAI (International Atomic Time) for leap second calculations
UT1 (Universal Time) for Earth rotation calculations
Julian Date (JD) split into two parts (JD1, JD2) to preserve precision
Time System Functions
The library provides several functions to work with different time systems:
Leap Seconds (TAI-UTC)
import datetime as dt
import rust_ephem as re
when = dt.datetime(2024, 1, 1, tzinfo=dt.timezone.utc)
tai_utc = re.get_tai_utc_offset(when)
print(f"TAI-UTC offset: {tai_utc} seconds")
The TAI-UTC offset represents the number of leap seconds at a given time.
UT1-UTC Offset
import rust_ephem as re
# Initialize UT1 provider (loads IERS data)
if re.init_ut1_provider():
print("UT1 data available")
when = dt.datetime(2024, 1, 1, tzinfo=dt.timezone.utc)
ut1_utc = re.get_ut1_utc_offset(when)
print(f"UT1-UTC offset: {ut1_utc} seconds")
# Check availability
if re.is_ut1_available():
print("UT1 data is loaded")
UT1-UTC varies continuously due to Earth’s irregular rotation and requires up-to-date IERS data for accurate values.
Earth Orientation Parameters (EOP)
import rust_ephem as re
# Initialize EOP provider (loads polar motion data)
if re.init_eop_provider():
print("EOP data available")
when = dt.datetime(2024, 1, 1, tzinfo=dt.timezone.utc)
xp, yp = re.get_polar_motion(when)
print(f"Polar motion: x_p = {xp} arcsec, y_p = {yp} arcsec")
# Check availability
if re.is_eop_available():
print("EOP data is loaded")
Polar motion parameters are used for high-precision coordinate transformations.
Assumptions and approximations
When IERS data is not available:
TT − UTC is approximated as 69.184 seconds (sufficient for many LEO tasks)
UT1 − UTC is assumed to be zero
Polar motion (x_p, y_p) is assumed to be zero
These approximations are typically sufficient for:
Low Earth Orbit (LEO) satellite tracking
General-purpose ephemeris calculations
Applications requiring ~100m position accuracy
For higher accuracy requirements:
Initialize UT1 provider with
init_ut1_provider()Initialize EOP provider with
init_eop_provider()Enable polar motion corrections with
polar_motion=Trueparameter
Practical guidance
Always pass timezone-aware datetimes (UTC) from Python
Be consistent with time scales when comparing to external tools (e.g., astropy)
For sub-arcsecond accuracy, use up-to-date IERS data and enable all corrections
The library automatically handles leap seconds for dates with known TAI-UTC offsets
UT1 and polar motion data must be explicitly loaded via init functions
See also: Coordinate Frames and Accuracy and precision.