// Written by Curtis Olson, started August 1997.
//
-// Copyright (C) 1997 Curtis L. Olson - curt@flightgear.org
+// Copyright (C) 1997 Curtis L. Olson - http://www.flightgear.org/~curt
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
private:
// tzContainer stores all the current Timezone control points/
- TimezoneContainer* tzContainer;
+ SGTimeZoneContainer* tzContainer;
// Points to the current local timezone name;
- char *zonename;
+ string zonename;
// Unix "calendar" time in seconds
time_t cur_time;
// Break down of equivalent GMT time
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__MINGW32__)
struct tm m_gmt; // copy of system gmtime(&time_t) structure
#else
struct tm *gmt;
// gst_diff has pretty good accuracy over the span of a couple hours
double gst_diff;
+ /** init common constructor code */
+ void init( double lon_rad, double lat_rad, const string& root,
+ time_t init_time );
+
public:
/** Default constructor */
* If you don't know your position when you call the SGTime
* constructor, you can just use the first form (which assumes 0,
* 0).
- * @param lon current longitude
- * @param lat current latitude
- * @param root root path point to data file location (timezone, etc.) */
- SGTime( double lon, double lat, const string& root );
+ * @param lon_rad current longitude (radians)
+ * @param lat_rad current latitude (radians)
+ * @param root root path point to data file location (timezone, etc.)
+ * @param init_time provide an initialization time, 0 means use
+ current clock time */
+ SGTime( double lon_rad, double lat_rad, const string& root,
+ time_t init_time );
/**
* Create an instance given a data file path.
* you to offset "sim" time relative to "real" time. The update()
* method is designed to be called by the host application before
* every frame.
- * @param lon current longitude
- * @param lat current latitude
+ * @param lon_rad current longitude (radians)
+ * @param lat_rad current latitude (radians)
+ * @param ct specify a unix time, otherwise specify 0 to use current
+ clock time
* @param warp an optional time offset specified in seconds. This
* allows us to advance or rewind "time" if we choose to. */
- void update( double lon, double lat, long int warp = 0 );
+ void update( double lon_rad, double lat_rad, time_t ct, long int warp );
/**
* Given lon/lat, update timezone information and local_offset
* enough that your timezone may have changed as well. In the
* FlightGear project we call updateLocal() every few minutes from
* our periodic event manager.
- * @param lon current longitude
- * @param lat current latitude
+ * @param lon_rad current longitude (radians)
+ * @param lat_rad current latitude (radians)
* @param root base path containing time zone directory */
- void updateLocal( double lon, double lat, const string& root );
+ void updateLocal( double lon_rad, double lat_rad, const string& root );
/** @return current system/unix time in seconds */
inline time_t get_cur_time() const { return cur_time; };
/** @return time zone name for your current position*/
- inline char* get_zonename() const { return zonename; }
+ inline const char * get_zonename() const { return zonename.c_str(); }
/** @return GMT in a "brokent down" tm structure */
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__MINGW32__)
inline struct tm* getGmt()const { return (struct tm *)&m_gmt; };
#else
inline struct tm* getGmt()const { return gmt; };
* \relates SGTime
* Given an optional offset from current time calculate the current
* modified julian date.
+ * @param ct specify a unix time, otherwise specify 0 to use current
+ clock time
* @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 );
+double sgTimeCurrentMJD( time_t ct /* = 0 */, long int warp /* = 0 */ );
/**
* \relates SGTime