#ifndef JULIAN_H_ #define JULIAN_H_ #include "Globals.h" #include "Timespan.h" #include #include class Julian { public: Julian(); Julian(const Julian& jul); Julian(const time_t t); Julian(int year, double day); Julian(int year, int mon, int day, int hour, int min, double sec); ~Julian() { }; // comparison operators bool operator==(const Julian &date) const; bool operator!=(const Julian &date) const; bool operator>(const Julian &date) const; bool operator<(const Julian &date) const; bool operator>=(const Julian &date) const; bool operator<=(const Julian &date) const; // assignment Julian& operator =(const Julian& b); Julian& operator =(const double b); // arithmetic Julian operator +(const Timespan& b) const; Julian operator -(const Timespan& b) const; Timespan operator -(const Julian& b) const; // compound assignment Julian & operator +=(const Timespan& b); Julian & operator -=(const Timespan& b); friend std::ostream & operator<<(std::ostream& stream, const Julian& julian); struct DateTimeComponents { DateTimeComponents() : years(0), months(0), days(0), hours(0), minutes(0), seconds(0.0) { } int years; int months; int days; int hours; int minutes; double seconds; }; void ToGregorian(struct DateTimeComponents* datetime) const; time_t ToTime() const; double ToGreenwichSiderealTime() const; double ToLocalMeanSiderealTime(const double& lon) const; double FromJan1_00h_1900() const { return date_ - kEPOCH_JAN1_00H_1900; } double FromJan1_12h_1900() const { return date_ - kEPOCH_JAN1_12H_1900; } double FromJan1_12h_2000() const { return date_ - kEPOCH_JAN1_12H_2000; } double GetDate() const { return date_; } void AddDay(double day) { date_ += day; } void AddHour(double hr) { date_ += (hr / kHOURS_PER_DAY); } void AddMin(double min) { date_ += (min / kMINUTES_PER_DAY); } void AddSec(double sec) { date_ += (sec / kSECONDS_PER_DAY); } static bool IsLeapYear(int y) { return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0); } protected: void Initialize(int year, double day); void Initialize(int year, int mon, int day, int hour, int min, double sec); /* * the stored julian date */ double date_; }; #endif