如何在调用strftime之前设置时区?

时间:2009-10-25 06:41:48

标签: c unix

我使用自1970年以来的秒(和微秒)以及时区和dst标志来表示日期。我想使用strftime打印日期的表示,但它使用从环境中获取的时区(extern long int timezone)的全局值。如何让strftime打印我选择的区域?

2 个答案:

答案 0 :(得分:6)

以下程序使用您所需的时区设置UNIX环境变量TZ,然后使用strftime打印格式化的时间。

在下面的示例中,时区设置为美国太平洋时区。

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

int main (int argc, char *argv[])
{
    struct tm *mt;
    time_t mtt;
    char ftime[10];

    setenv("TZ", "PST8PDT", 1);
    tzset();
    mtt = time(NULL);
    mt = localtime(&mtt);
    strftime(ftime,sizeof(ftime),"%Z %H%M",mt);

    printf("%s\n", ftime);
}

答案 1 :(得分:1)

通过设置timezone全局变量更改时区,并使用localtime获取您通过strftime打印的时间。