A class to calculate and manage a variety of time parameters. More...
#include <sg_time.hxx>
Public Member Functions | |
SGTime () | |
Default constructor. | |
SGTime (double lon_rad, double lat_rad, const std::string &root, time_t init_time) | |
Create an instance based on a specified position and data file path. | |
SGTime (const std::string &root) | |
Create an instance given a data file path. | |
~SGTime () | |
Destructor. | |
void | update (double lon_rad, double lat_rad, time_t ct, long int warp) |
Update the time related variables. | |
void | updateLocal (double lon_rad, double lat_rad, const std::string &root) |
Given lon/lat, update timezone information and local_offset The updateLocal() method is intended to be called less frequently - only when your position is likely to be changed enough that your timezone may have changed as well. | |
time_t | get_cur_time () const |
const char * | get_zonename () const |
struct tm * | getGmt () const |
double | getJD () const |
double | getMjd () const |
double | getLst () const |
double | getGst () const |
time_t | get_local_offset () const |
Related Functions | |
(Note that these are not member functions.) | |
time_t | sgTimeGetGMT (int year, int month, int day, int hour, int minute, int second) |
time_t | sgTimeGetGMT (struct tm *the_time) |
double | sgTimeCalcMJD (int mn, double dy, int yr) |
double | sgTimeCurrentMJD (time_t ct, long int warp) |
double | sgTimeCalcGST (double mjd) |
char * | sgTimeFormatTime (const struct tm *p, char *buf) |
A class to calculate and manage a variety of time parameters.
The SGTime class provides many real-world time values. It calculates current time in seconds, GMT time, local time zone, local offset in seconds from GMT, Julian date, and sidereal time. All of these operate with seconds as their granularity so this class is not intended for timing sub-second events. These values are intended as input to things like real world lighting calculations and real astronomical object placement.
To properly use the SGTime class there are a couple of things to be aware of. After creating an instance of the class, you will need to periodically (i.e. before every frame) call the update() method. Optionally, if you care about updating time zone information based on your latitude and longitude, you can call the updateLocal() method periodically as your position changes by significant amounts.
Definition at line 63 of file sg_time.hxx.
SGTime::SGTime | ( | double | lon_rad, | |
double | lat_rad, | |||
const std::string & | root, | |||
time_t | init_time | |||
) |
Create an instance based on a specified position and data file path.
This creates an instance of the SGTime object. When calling the constructor you need to provide a root path pointing to your time zone definition tree. Optionally, you can call a form of the constructor that accepts your current longitude and latitude in radians.
If you don't know your position when you call the SGTime constructor, you can just use the first form (which assumes 0, 0).
lon_rad | current longitude (radians) | |
lat_rad | current latitude (radians) | |
root | root path point to data file location (timezone, etc.) | |
init_time | provide an initialization time, 0 means use current clock time |
SGTime::SGTime | ( | const std::string & | root | ) |
Create an instance given a data file path.
root | root path point to data file location (timezone, etc.) |
time_t SGTime::get_cur_time | ( | ) | const [inline] |
Definition at line 163 of file sg_time.hxx.
time_t SGTime::get_local_offset | ( | ) | const [inline] |
Definition at line 184 of file sg_time.hxx.
const char* SGTime::get_zonename | ( | ) | const [inline] |
Definition at line 166 of file sg_time.hxx.
struct tm* SGTime::getGmt | ( | ) | const [inline, read] |
Definition at line 169 of file sg_time.hxx.
double SGTime::getGst | ( | ) | const [inline] |
Definition at line 181 of file sg_time.hxx.
double SGTime::getJD | ( | ) | const [inline] |
Definition at line 172 of file sg_time.hxx.
double SGTime::getLst | ( | ) | const [inline] |
Definition at line 178 of file sg_time.hxx.
double SGTime::getMjd | ( | ) | const [inline] |
Definition at line 175 of file sg_time.hxx.
void SGTime::update | ( | double | lon_rad, | |
double | lat_rad, | |||
time_t | ct, | |||
long int | warp | |||
) |
Update the time related variables.
The update() method requires you to pass in your position and an optional time offset in seconds. The offset (or warp) allows you to offset "sim" time relative to "real" time. The update() method is designed to be called by the host application before every frame.
lon_rad | current longitude (radians) | |
lat_rad | current latitude (radians) | |
ct | specify a unix time, otherwise specify 0 to use current clock time | |
warp | an optional time offset specified in seconds. This allows us to advance or rewind "time" if we choose to. |
Definition at line 189 of file sg_time.cxx.
void SGTime::updateLocal | ( | double | lon_rad, | |
double | lat_rad, | |||
const std::string & | root | |||
) |
Given lon/lat, update timezone information and local_offset The updateLocal() method is intended to be called less frequently - only when your position is likely to be changed enough that your timezone may have changed as well.
In the FlightGear project we call updateLocal() every few minutes from our periodic event manager.
lon_rad | current longitude (radians) | |
lat_rad | current latitude (radians) | |
root | base path containing time zone directory |
double sgTimeCalcGST | ( | double | mjd | ) | [related] |
Given an mjd, calculate greenwich mean sidereal time, gst
mjd | modified julian date |
Definition at line 397 of file sg_time.cxx.
double sgTimeCalcMJD | ( | int | mn, | |
double | dy, | |||
int | yr | |||
) | [related] |
Given a date in our form, return the equivalent modified Julian date (number of days elapsed since 1900 jan 0.5), mjd. Adapted from Xephem.
mn | month | |
dy | day | |
yr | year |
Definition at line 311 of file sg_time.cxx.
double sgTimeCurrentMJD | ( | time_t | ct, | |
long int | warp | |||
) | [related] |
Given an optional offset from current time calculate the current modified julian date.
ct | specify a unix time, otherwise specify 0 to use current clock time | |
warp | number of seconds to offset from current time (0 if no offset) |
Definition at line 361 of file sg_time.cxx.
char * sgTimeFormatTime | ( | const struct tm * | p, | |
char * | buf | |||
) | [related] |
Format time in a pretty form
p | time specified in a tm struct | |
buf | buffer space to contain the result |
Definition at line 562 of file sg_time.cxx.
time_t sgTimeGetGMT | ( | struct tm * | the_time | ) | [related] |
this is just a wrapper for sgTimeGetGMT that allows an alternate form of input parameters.
the_time | the current GMT time in the tm structure |
Definition at line 212 of file sg_time.hxx.
time_t sgTimeGetGMT | ( | int | year, | |
int | month, | |||
int | day, | |||
int | hour, | |||
int | minute, | |||
int | second | |||
) | [related] |
Return unix time in seconds for the given date (relative to GMT)
year | current GMT year | |
month | current GMT month | |
day | current GMT day | |
hour | current GMT hour | |
minute | current minute | |
second | current second |
Definition at line 466 of file sg_time.cxx.