X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-0.6 required=5.0 tests=AWL,BAYES_00,SPF_NEUTRAL,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Message-ID: <4CCB561D.5070304@cornell.edu> Date: Fri, 29 Oct 2010 19:17:49 -0400 From: Ken Brown User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.11) Gecko/20101013 Thunderbird/3.1.5 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: localtime and TZ References: <4CCB4025 DOT 6070405 AT cornell DOT edu> <4CCB42AF DOT 2090907 AT redhat DOT com> <4CCB439B DOT 7060602 AT redhat DOT com> <4CCB4676 DOT 8080609 AT cornell DOT edu> <4CCB47A6 DOT 9010600 AT redhat DOT com> In-Reply-To: <4CCB47A6.9010600@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On 10/29/2010 6:16 PM, Eric Blake wrote: > 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 >> #include >> >> 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. Wouldn't you interpret this as meaning that the implementation-defined default timezone information should be the same every time localtime is called with TZ unset? If not, what should a program do to get the "standard" default timezone information that it would get if TZ had never been set in the first place? Ken -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple