Add a separate function to just return modified julian date.

This commit is contained in:
curt 2001-07-03 14:39:05 +00:00
parent b7a91bdb03
commit 76a5950f19
2 changed files with 79 additions and 26 deletions

View File

@ -117,11 +117,15 @@ SGTime::SGTime() {
SGTime::~SGTime()
{
if ( tzContainer != NULL ) {
delete tzContainer;
TimezoneContainer *tmp = tzContainer;
tzContainer = NULL;
delete tmp;
}
if ( zonename != NULL ) {
delete zonename;
char *tmp = zonename;
zonename = NULL;
delete tmp;
}
}
@ -188,6 +192,7 @@ static double sidereal_course( time_t cur_time, struct tm *gmt, double lng )
// Update the time related variables
void SGTime::update( double lon, double lat, long int warp ) {
double gst_precise, gst_course;
#ifdef _MSC_VER
tm * gmt = &m_gmt;
#endif
@ -213,11 +218,8 @@ void SGTime::update( double lon, double lat, long int warp ) {
<< gmt->tm_hour << ":" << gmt->tm_min << ":"
<< gmt->tm_sec );
// calculate modified Julian date
// t->mjd = cal_mjd ((int)(t->gmt->tm_mon+1), (double)t->gmt->tm_mday,
// (int)(t->gmt->tm_year + 1900));
mjd = sgTimeCalcMJD( (int)(gmt->tm_mon+1), (double)gmt->tm_mday,
(int)(gmt->tm_year + 1900) );
// calculate modified Julian date starting with current
mjd = sgTimeCurrentMJD( warp );
// add in partial day
mjd += (gmt->tm_hour / 24.0) + (gmt->tm_min / (24.0 * 60.0)) +
@ -256,23 +258,24 @@ void SGTime::update( double lon, double lat, long int warp ) {
// Given lon/lat, update timezone information and local_offset
void SGTime::updateLocal( double lon, double lat, const string& root )
{
time_t currGMT;
time_t aircraftLocalTime;
GeoCoord location( SGD_RADIANS_TO_DEGREES * lat, SGD_RADIANS_TO_DEGREES * lon );
GeoCoord* nearestTz = tzContainer->getNearest(location);
SGPath zone( root );
zone.append ( nearestTz->getDescription() );
if ( zonename ) {
delete zonename;
}
zonename = strdup( zone.c_str() );
currGMT = sgTimeGetGMT( gmtime(&cur_time) );
aircraftLocalTime = sgTimeGetGMT( (fgLocaltime(&cur_time, zone.c_str())) );
local_offset = aircraftLocalTime - currGMT;
// cout << "Using " << local_offset << " as local time offset Timezone is "
// << zonename << endl;
void SGTime::updateLocal( double lon, double lat, const string& root ) {
time_t currGMT;
time_t aircraftLocalTime;
GeoCoord location( SGD_RADIANS_TO_DEGREES * lat, SGD_RADIANS_TO_DEGREES * lon );
GeoCoord* nearestTz = tzContainer->getNearest(location);
SGPath zone( root );
zone.append ( nearestTz->getDescription() );
if ( zonename ) {
char *ptr = zonename;
zonename = NULL;
delete ptr;
}
zonename = strdup( zone.c_str() );
currGMT = sgTimeGetGMT( gmtime(&cur_time) );
aircraftLocalTime = sgTimeGetGMT( (fgLocaltime(&cur_time, zone.c_str())) );
local_offset = aircraftLocalTime - currGMT;
// cout << "Using " << local_offset << " as local time offset Timezone is "
// << zonename << endl;
}
@ -327,6 +330,48 @@ double sgTimeCalcMJD(int mn, double dy, int yr) {
}
// return the current modified Julian date (number of days elapsed
// since 1900 jan 0.5), mjd.
double sgTimeCurrentMJD( long int warp ) {
#ifdef _MSC_VER
struct tm m_gmt; // copy of system gmtime(&time_t) structure
#else
struct tm *gmt;
#endif
#ifdef _MSC_VER
tm * gmt = &m_gmt;
#endif
// get current Unix calendar time (in seconds)
// warp += warp_delta;
time_t cur_time = time(NULL) + warp;
SG_LOG( SG_EVENT, SG_DEBUG,
" Current Unix calendar time = " << cur_time
<< " warp = " << warp );
// get GMT break down for current time
#ifdef _MSC_VER
memcpy( gmt, gmtime(&cur_time), sizeof(tm) );
#else
gmt = gmtime(&cur_time);
#endif
SG_LOG( SG_EVENT, SG_DEBUG,
" Current GMT = " << gmt->tm_mon+1 << "/"
<< gmt->tm_mday << "/" << (1900 + gmt->tm_year) << " "
<< gmt->tm_hour << ":" << gmt->tm_min << ":"
<< gmt->tm_sec );
// calculate modified Julian date
// t->mjd = cal_mjd ((int)(t->gmt->tm_mon+1), (double)t->gmt->tm_mday,
// (int)(t->gmt->tm_year + 1900));
double mjd = sgTimeCalcMJD( (int)(gmt->tm_mon+1), (double)gmt->tm_mday,
(int)(gmt->tm_year + 1900) );
return mjd;
}
// given an mjd, calculate greenwich mean sidereal time, gst
double sgTimeCalcGST( double mjd ) {
double gst;

View File

@ -231,12 +231,20 @@ inline time_t sgTimeGetGMT(struct tm* the_time) {
* @return modified julian date */
double sgTimeCalcMJD(int mn, double dy, int yr);
/**
* \relates SGTime
* Given an optional offset from current time calculate the current
* modified julian date.
* @param warp number of seconds to offset from current time (0 if no offset)
* @return current modified Julian date (number of days elapsed
* since 1900 jan 0.5), mjd. */
double sgTimeCurrentMJD( long int warp );
/**
* \relates SGTime
* Given an mjd, calculate greenwich mean sidereal time, gst
* @param mjd modified julian date
* @return greenwich mean sidereal time (gst)
*/
* @return greenwich mean sidereal time (gst) */
double sgTimeCalcGST( double mjd );
/**