我有欧洲/巴黎、美洲/纽约等时区名称,如
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
给定这些字符串(如“欧洲/巴黎”),我想知道这些时区的UTC偏移量(以秒为单位)。
我能想到的一种方法是使用TZ环境变量来设置时区和计算偏移量,但我能确切地知道如何做到这一点。
我在linux上用C语言工作。
需要你的建议!

最佳答案

我正在使用以下代码获取特定时区的时间。

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);
}

关于c - 如何从C中的IANA时区名称计算UTC偏移量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26845638/

10-11 18:49