Как рассчитать смещение UTC от имени часового пояса IANA в C

У меня есть названия часовых поясов, таких как Европа / Париж, Америка / Нью-Йорк, как описано в
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Учитывая эти строки (например, «Европа / Париж»), я хочу знать смещение UTC в секундах для этих часовых поясов.

Один из способов, о котором я могу думать, – это играть с переменными окружения TZ, чтобы установить часовой пояс и вычислить смещение. Но я могу точно выяснить, как это сделать.

Я работаю в C на linux.

Нужны ваши предложения!

    Я использую следующий код, чтобы получить время с определенным часовым поясом.

    time_t mkTimeForTimezone(struct tm *tm, char *timezone) { char *tz; time_t res; tz = getenv("TZ"); if (tz != NULL) tz = strdup(tz); setenv("TZ", timezone, 1); tzset(); res = mktime(tm); if (tz != NULL) { setenv("TZ", tz, 1); free(tz); } else { unsetenv("TZ"); } tzset(); return(res); } 

    С помощью этой функции вычисление смещения является прямым. Например:

     int main() { char *timezone = "America/New_York"; struct tm tt; time_t t; int offset; t = time(NULL); tt = *gmtime(&t); offset = mkTimeForTimezone(&tt, timezone) - t; printf("Current offset for %s is %d\n", timezone, offset); }