TT-default time workflows and explicit-scale conversions.
#include <iomanip>
#include <iostream>
template <
typename T>
static CivilTime to_utc_civil(
const T &time) {
return time.template to<scale::UTC>().to_civil();
}
int main() {
auto ctx = TimeContext::with_builtin_eop();
auto tai = tt.to<scale::TAI>();
auto ut1 = tt.to_with<
UT1>(ctx);
auto jd_utc = utc.to<format::JD>();
auto unix_time = utc.to<format::Unix>();
auto gps_time = tai.to<format::GPS>();
std::cout << "Time Scales, Formats, and Period<TT, MJD> Conversions\n"
<< "============================================\n\n";
std::cout << "Civil UTC : " << civil << "\n";
std::cout << "UTC axis : " << utc << "\n";
std::cout << "TT axis : " << tt << "\n\n";
std::cout << "Same instant, different encodings:\n";
std::cout << " JD(TT) = " << std::fixed << std::setprecision(9) << jd_tt << "\n";
std::cout << " JD(UTC) = " << jd_utc << "\n";
std::cout << " Time<TT, MJD>(TT) = " << mjd_tt << "\n";
std::cout << " Unix(UTC) = " << std::setprecision(3) << unix_time.value() << " s\n";
std::cout << " GPS(TAI) = " << gps_time.value() << " s\n\n";
std::cout << "Same instant, different scales:\n";
std::cout << " TT JD = " << std::setprecision(9) << tt.to<format::JD>() << "\n";
std::cout << " TAI JD = " << tai.to<format::JD>() << "\n";
std::cout << " TDB JD = " << tdb.to<format::JD>() << "\n";
std::cout << " UT1 JD = " << ut1.to<format::JD>() << "\n";
constexpr double SPD = 86'400.0;
double tt_minus_tai = (tt.to<format::JD>().value() - tai.to<format::JD>().value()) * SPD;
double tt_minus_ut1 = (tt.to<format::JD>().value() - ut1.to<format::JD>().value()) * SPD;
std::cout << " TT-TAI = " << std::setprecision(6) << tt_minus_tai << " s\n";
std::cout << " TT-UT1 = " << tt_minus_ut1 << " s\n\n";
auto jd_end = jd_tt;
jd_end += qtty::Hour(12.0);
tempoch::Period<Time<TT, JD>> jd_window(jd_tt, jd_end);
tempoch::Period<CivilTime> civil_window(to_utc_civil(jd_window.start()),
to_utc_civil(jd_window.end()));
std::cout << "Periods over the same half-day window:\n";
std::cout << " JD(TT) " << jd_window << " duration=" << jd_window.duration<qtty::Hour>()
<< "\n";
std::cout << " Time<TT, MJD>(TT) " << mjd_window
<< " duration=" << mjd_window.duration<qtty::Hour>() << "\n";
std::cout << " Civil " << civil_window << " duration=" << civil_window.duration<qtty::Hour>()
<< "\n";
return 0;
}
tempoch::EncodedTime< Scale, Format > Time
tempoch::Time< Scale > TimeAxis
tempoch::CivilTime CivilTime
tempoch::Period< Time< Scale, Format > > Period
Umbrella header for the siderust C++ wrapper library.