From 6d3a824e1cdae6e28146b7de380724b49488f3c2 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 25 Feb 2021 19:12:38 +0000 Subject: tim --- app/time_fn.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 120 insertions(+), 5 deletions(-) (limited to 'app/time_fn.c') diff --git a/app/time_fn.c b/app/time_fn.c index 87fb48f..3e58854 100644 --- a/app/time_fn.c +++ b/app/time_fn.c @@ -1,3 +1,4 @@ +#include #include "project.h" static int is_leap (unsigned year) @@ -17,7 +18,7 @@ static int is_leap (unsigned year) UTC time_epoch_to_utc (EPOCH epoch) { - UTC u; + UTC u = {0}; uint64_t day; unsigned y400, y100, y4; @@ -152,9 +153,6 @@ UTC time_epoch_to_utc (EPOCH epoch) return u; } - - - EPOCH time_utc_to_epoch (UTC u) { unsigned y400; @@ -221,7 +219,7 @@ void time_print_utc (const char *p, UTC u, const char *t) { const char *dname[] = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat", "Sun"}; const char *mname[] = {"", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; - printf ("%s%s %04d-%s-%02d %02d:%02d:%02d.%09d %s\r\n", p ? p : "", dname[u.wday], u.year, mname[u.month], u.mday, u.hour, u.minute, u.second, u.nanosecond , t ? t : ""); + printf ("%s%s %04d-%s-%02d %02d:%02d:%02d.%09d %s\r\n", p ? p : "", dname[u.wday], u.year, mname[u.month], u.mday, u.hour, u.minute, u.second, u.nanosecond, t ? t : ""); } void time_print_epoch (const char *p, EPOCH e, const char *t) @@ -230,3 +228,120 @@ void time_print_epoch (const char *p, EPOCH e, const char *t) time_print_utc (p, u, t); } + +double +time_utc_to_tjd (UTC u) +{ + unsigned y400; + unsigned y100; + unsigned y4; + + double ret; + unsigned jd; + + static int const mdays[] = + { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; + static int const lmdays[] = + { 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }; + + u.is_leap = is_leap (u.year); + + if (u.year < 100) + u.year += 2000; + + + if (!u.jday) { + if (u.is_leap) + u.jday = u.mday + lmdays[u.month]; + else + u.jday = u.mday + mdays[u.month]; + } + + u.year -= 1601; + y400 = u.year / 400; + u.year -= y400 * 400; + y100 = u.year / 100; + u.year -= y100 * 100; + y4 = u.year / 4; + u.year -= y4 * 4; + + jd = u.jday - 1; + jd += u.year * 365; + jd += y4 * 1461; + jd += y100 * 36524; + jd += y400 * 146097; + + + jd += 2305813; + jd -= 2451545; + + + + ret = (double) u.nanosecond; + ret /= 1000000000.; + ret += (double) u.second; + ret /= 60.; + ret += (double) u.minute; + ret /= 60.; + ret += (double) u.hour; + ret /= 24.; + + ret += .5; + + ret += (double) jd; + + return ret; +} + +double +time_utc_to_ra (UTC u) +{ + double tjd = time_utc_to_tjd (u); + double T = tjd / 36525.; + double theta0 = + 280.46061837 + (360.98564736629 * tjd) + (0.000387933 * T * T) - + (T * T * T / 38710000.0); + + return remainder (theta0, 360.); +} + + +ST +time_ra_to_st (double ra) +{ + ST ret; + unsigned i; + + while (ra < 0.) + ra += 360.; + + if (ra >= 360.0) + ra = remainder (ra, 360.); + + ra *= 240.0; + + i = (int) (floor (ra) + .5); + ra -= (double) i; + ra *= 1000000000.; + + ret.nanosecond = (unsigned) (ra + .5); + ret.second = i % 60; + i /= 60; + ret.minute = i % 60; + i /= 60; + ret.hour = i; + + return ret; +} + + + +ST time_utc_to_lst (UTC u, double lon) +{ + double ra; + + ra = time_utc_to_ra (u); + return time_ra_to_st (ra + lon); +} + + -- cgit v1.2.3