From: SourceForge.net <no...@so...> - 2004-04-23 21:15:34
|
Bugs item #940278, was opened at 2004-04-22 22:03 Message generated for change (Comment added) made by davidw You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=940278&group_id=10894 Category: 06. Time Measurement Group: None Status: Open Resolution: None Priority: 5 Submitted By: David N. Welton (davidw) Assigned to: Kevin B KENNY (kennykb) Summary: env(TZ) has delayed effect on clock format Initial Comment: This script: ---- if { ! [info exists env(TZ) ] } { set myTZ "" } else { set myTZ $env(TZ) } puts "Local time is [clock format [clock seconds]]" set env(TZ) GMT+8 puts "Time in Eugene, Oregon is [clock format [clock seconds]]" set env(TZ) GMT-1 puts "Time in Padua, Italy is [clock format [clock seconds]]" if { $myTZ == "" } { unset env(TZ) } else { set env(TZ) $myTZ } ---- does not produce the desired results, in either 8.4.6 or 8.5. kbk found that HAVE_TZSET is not tested for in the configure scripts, except for some crufty unix systems. He also proposed commenting out the calledTzset = 1; on or around line 285. Further bulletins as events warrant. ---------------------------------------------------------------------- >Comment By: David N. Welton (davidw) Date: 2004-04-23 23:15 Message: Logged In: YES user_id=240 It seems as if the problem may be that localtime_r does not call tzset, as normal localtime does. Note that there are also some discrepencies between tclUnixThrd.c and tclUnixTime.c. The first globally redefines localtime, whereas the second also checks if HAVE_LOCALTIME_R is defined. This conflict ought to be resolved. ---------------------------------------------------------------------- Comment By: David N. Welton (davidw) Date: 2004-04-22 22:44 Message: Logged In: YES user_id=240 This works on my system (linux, modern kernel, modern glibc): #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { time_t thetime = 0; struct tm *tms; time(&thetime); setenv("TZ", "GMT-1", 1); tms = localtime(&thetime); printf("padova hour %d\n", tms->tm_hour); setenv("TZ", "GMT+8", 1); tms = localtime(&thetime); printf("eugene hour %d\n", tms->tm_hour); } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=940278&group_id=10894 |