I am writing a Linux (Ubuntu and Debian Lenny) application in C++.
Now I need to know the distance/offset between UTC and the currently set system time at a given day in the past. Since I need to convert recorded data, I the distance need to be calculated with respect to a date in the past (which may have a different DST setting than the current day).
Anyone know how to do this?
Edit: Reading the first answer I think I was misunderstood: I do not want to compare dates/times. I have date/time values which I want to convert from UTC to local time.
Prepare the tm structure with date:
struct tm date;
memset(&date,0,sizeof(date));
date.tm_year = year - 1900;
date.tm_mon = month - 1;
date.tm_mday = day;
date.tm_hour = hour;
date.tm_min = minute;
date.tm_sec = second;
date.tm_isdst = -1; // VERY IMPORTANT
mktime(&date); /// fill rest of fields
And then take a look on tm_gmtoff
printf("%d\n",date.tm_gmtoff);
This is distance from UTC.
Now this is Linux and BSD specific, it would not work on other stystems, and this works with respect to DST.
Read man mktime for more information. And filling struct tm
with correct values
P.S.: Converting from UTC to Local and back?
time_t posix_time = timegm(&UTC_Filled_struct_tm); // Linux specific line
localtime_r(&posix_time,&local_Filled_struct_tm);
Local to UTC
time_t posix_time = mktime(&local_Filled_struct_tm);
gmtime_r(&posix_time,&UTC_Filled_struct_tm);