From 3ecdfaec99922fbb462a1bbd1bfe75f918ced6df Mon Sep 17 00:00:00 2001 From: Daniel Warner Date: Sun, 1 May 2011 23:58:33 +0100 Subject: [PATCH] Added DateTime struct and method to split julian --- Julian.cpp | 31 +++++++++++++++++++++++++++++++ Julian.h | 11 +++++++++++ 2 files changed, 42 insertions(+) diff --git a/Julian.cpp b/Julian.cpp index 28db393..3985d76 100644 --- a/Julian.cpp +++ b/Julian.cpp @@ -313,3 +313,34 @@ double Julian::ToGreenwichSiderealTime() const { double Julian::ToLocalMeanSiderealTime(const double& lon) const { return fmod(ToGreenwichSiderealTime() + lon, Globals::TWOPI()); } + +void Julian::GetDateTime(struct DateTimeComponents* datetime) const { + + double jdAdj = GetDate() + 0.5; + int Z = (int) jdAdj; + double F = jdAdj - Z; + + int A = 0; + + if (Z < 2299161) { + A = static_cast(Z); + } else { + int a = static_cast((Z - 1867216.25) / 36524.25); + A = static_cast(Z + 1 + a - static_cast(a / 4)); + } + + int B = A + 1524; + int C = static_cast((B - 122.1) / 365.25); + int D = static_cast(365.25 * C); + int E = static_cast((B - D) / 30.6001); + + datetime->hours = static_cast(F * 24.0); + F -= datetime->hours / 24.0; + datetime->minutes = static_cast(F * 1440.0); + F -= datetime->minutes / 1440.0; + datetime->seconds = F * 86400.0; + + datetime->days = B - D - static_cast(30.6001 * E); + datetime->months = E < 14 ? E - 1 : E - 13; + datetime->years = datetime->months > 2 ? C - 4716 : C - 4715; + } diff --git a/Julian.h b/Julian.h index 59b0269..9c947b2 100644 --- a/Julian.h +++ b/Julian.h @@ -32,6 +32,17 @@ public: ~Julian() { }; + struct DateTimeComponents { + int years; + int months; + int days; + int hours; + int minutes; + double seconds; + }; + + void GetDateTime(struct DateTimeComponents* datetime) const; + time_t ToTime() const; double ToGreenwichSiderealTime() const; double ToLocalMeanSiderealTime(const double& lon) const;