How is time zone change signalled?
Peter Steele
psteele at webmail.maxiscale.com
Fri Aug 7 17:29:21 UTC 2009
>Did you try unsetting TZ and then calling tzset()? The man page
implies that doing so will force a reread of /etc/localtime
>(http://www.freebsd.org/cgi/man.cgi?query=tzset&sourceid=opensearch):
>
>"The tzset() function initializes time conversion information used by
the library routine localtime(3). The environment variable TZ specifies
how this is done.
>
>If TZ does not appear in the environment, the best available
approximation to local wall clock time, as specified by the
tzfile(5)-format file /etc/localtime is used."
>
>I haven't tested it, though, and I'm no timezone expert, so I may be
completely off-base!
Yes, I've tried the tzset function. I'm basically doing the equivalent
of these steps after the Java app changes time zone and updates
/etc/localtime:
time_t date = time(NULL);
unsetenv("TZ");
tzset();
printf("time zone is %s/%s", tzname[0], tzname[1]);
struct tm* locTime = localtime(&date);
printf("%02d:%02d:%02d", locTime->tm_hour, locTime->tm_min,
locTime->tm_sec);
The time printed is still based on the old time zone though. The tzname
variable that is set by tzset() still shows for example EDT even if I
have just changed the time zone to PDT. If I stop and restart the C app,
the time is correct, and tzname is then PDT instead of EDT.
I'm very puzzled on what I'm supposed to do to kick start the C time
zone. We do not want to have to restart our C apps for something as
trivial as this.
More information about the freebsd-questions
mailing list