Problem here is that mktime uses local time not UTC time.
How about just computing the time difference between UTC and local time, then adding it to the value returned by mktime?
time_t local = time(NULL),
utc = mktime(gmtime(&local));
int diff = utc - local;