What's the best way to convert datetimes between local time and UTC in C/C++?
By "datetime", I mean some time representation that contains date and time-of-day. I'll be happy with
struct tm, or any other representation that makes it possible.
My platform is Linux.
Here's the specific problem I'm trying to solve: I get a pair of values containing a julian date and a number of seconds into the day. Those values are in GMT. I need to convert that to a local-timezone "YYYYMMDDHHMMSS" value. I know how to convert the julian date to Y-M-D, and obviously it is easy to convert seconds into HHMMSS. However, the tricky part is the timezone conversion. I'm sure I can figure out a solution, but I'd prefer to find a "standard" or "well-known" way rather than stumbling around.
A possibly related question is Get Daylight Saving Transition Dates For Time Zones in C
You're supposed to use combinations of
mktime. That should give you the orthogonal tools to do conversions between
struct tm and
time_t t; struct tm tm; struct tm * tmp; ... t = timegm(&tm); ... tmp = gmtime(t);
t = mktime(&tm); ... tmp = localtime(t);
tzset() does is set the internal timezone variable from the
TZ environment variable. I don't think this is supposed to be called more than once.
If you're trying to convert between timezones, you should modify the
If on Windows, you don't have timegm() available to you:
struct tm *tptr; time_t secs, local_secs, gmt_secs; time( &secs ); // Current time in GMT // Remember that localtime/gmtime overwrite same location tptr = localtime( &secs ); local_secs = mktime( tptr ); tptr = gmtime( &secs ); gmt_secs = mktime( tptr ); long diff_secs = long(local_secs - gmt_secs);
or something similar...