C API do konwersji stref czasowych w systemie Linux, ktokolwiek?

Szukam czegoś, co, jak przypuszczam, byłoby bardzo proste - podanie lokalnego czasu uniksowego w określonej strefie czasowej (określonej jako ciąg znaków, np. „America / New_York” - uwaga:nie mój czas lokalny), uzyskaj odpowiednią wartość czasu w GMT. To znaczy coś w rodzaju

time_t get_gmt_time(time_t local_time,
                    const char* time_zone);

Jak się wydaje, podstępnie proste, najbliższy, jaki mogłem znaleźć, był następujący fragment kodu ze strony man timegm:

       #include <time.h>
       #include <stdlib.h>

       time_t
       my_timegm(struct tm *tm)
       {
           time_t ret;
           char *tz;

           tz = getenv("TZ");
           setenv("TZ", "", 1);
           tzset();
           ret = mktime(tm);
           if (tz)
               setenv("TZ", tz, 1);
           else
               unsetenv("TZ");
           tzset();
           return ret;
       } 

Musi być lepszy sposób niż ta wojowniczo nieobjawowa obrzydliwość, prawda? Dobrze??

questionAnswers(6)

yourAnswerToTheQuestion