richcollins
richcollins

Reputation: 1544

How can I set the time zone before calling strftime?

I represent dates using seconds (and microseconds) since 1970 as well as a time zone and dst flag. I want to print a representation of the date using strftime, but it uses the global value for timezone (extern long int timezone) that is picked up from the environment. How can I get strftime to print the zone of my choice?

Upvotes: 8

Views: 7652

Answers (2)

David
David

Reputation: 14151

The following program sets the UNIX environment variable TZ with your required timezone and then prints a formatted time using strftime.

In the example below the timezone is set to U.S. Pacific Time Zone .

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

Upvotes: 9

P Shved
P Shved

Reputation: 99354

Change timezone via setting timezone global variable and use localtime to get the time you print via strftime.

Upvotes: 1

Related Questions