This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: localtime and TZ


On 10/29/2010 04:11 PM, Ken Brown wrote:
> 
> Thanks, Eric.  I didn't know about any of this.  (I was using a modification of a configure test from the emacs sources.)

Probably worth pointing it out to the emacs upstream, then :)

>  But I get the same behavior with the following revised test case:
> 
> #include <time.h>
> #include <stdio.h>
> 
> int
> main (void)
> {
>   time_t now = time ((time_t *) 0);
>   printf ("TZ is initially unset; hour = %d\n", localtime (&now)->tm_hour);
>   putenv ("TZ=GMT0");
>   printf ("TZ=GMT0; hour = %d\n", localtime (&now)->tm_hour);
>   unsetenv("TZ");
>   printf ("TZ unset; hour = %d\n", localtime (&now)->tm_hour);
>   putenv ("TZ=PST8");
>   printf ("TZ=PST8; hour = %d\n", localtime (&now)->tm_hour);
>   unsetenv("TZ");
>   printf ("TZ unset again; hour = %d\n", localtime (&now)->tm_hour);
> }
> 
> So the question remains whether this difference between Cygwin and Linux is a bug or by design.

Apparently by design.  POSIX requires:

http://www.opengroup.org/onlinepubs/9699919799/functions/localtime.html

Local timezone information is used as though localtime() calls tzset().

http://www.opengroup.org/onlinepubs/9699919799/functions/tzset.html

The tzset() function shall use the value of the environment variable TZ
to set time conversion information used by ctime , localtime , mktime ,
and strftime . If TZ is absent from the environment,
implementation-defined default timezone information shall be used.

But not the best of design, so a patch to fix cygwin to copy Linux'
behavior is probably appreciated.

-- 
Eric Blake   eblake@redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]