Skip to content
Snippets Groups Projects
orbit_time.h 1.59 KiB
Newer Older
#ifndef orbit_time
#define orbit_time
#include <ctime>

struct orbit_date
	{
		int years;
		int mounts;
		int days;
		int hours;
		int min;
		int sec;
	};
class Ot {
private:
	const double m_correction = 69.184; //      TAI  UTC     TT  TAI 
	std::timespec c_time{ 0,0 };
public:
	Ot() {
		std::timespec_get(&c_time, TIME_UTC);
	};
	~Ot() {};

	double getCurrent_US(double time_zone = 0) {
		std::timespec_get(&c_time, TIME_UTC);
		return (double(c_time.tv_sec)+ time_zone *3600 + c_time.tv_nsec * pow(10, -9));
	};
	double getCurrent_MJD(double time_zone =0) {
		return convert_JD_to_MJD(convert_US_to_JD(getCurrent_US(time_zone)));
	};
	double getCurrent_TT(double time_zone = 0) {
		return (getCurrent_MJD(time_zone) + m_correction / double(86400));
	}
	double getCurrent_TDB(double time_zone = 0);
	double GMST(double deltuUT);
	
	//input_time must be in the format US
	double convert_US_to_JD(double input_time, double time_zone = 0) {
		return (2440587.5 + (input_time + time_zone *3600) / double(86400));
	};
	//input_time must be in the format JD
	double convert_JD_to_MJD(double input_time) {
		return (input_time - 2400000.5);
	};
	//input_time must be in the format MJD
	double convert_MJD_to_TT(double input_time) {
		return (input_time + m_correction / double(86400));
	}
	//input_time must be in the format TT
	double convert_TT_to_TDB(double input_time);

	double convert_GDs_to_MJD(orbit_date input_time);

};

#endif // !orbit_time.h