On Thu, 4 Sep 2003, Dave Rolsky wrote: > On Thu, 4 Sep 2003, David Wheeler wrote: > > > > It's probably that simple. Simply setting the TZ env var probably > > > won't > > > do much. An app has to call POSIX::tzset() for that take effect. > > > > I find that for most date and time handling I do, just setting $ENV{TZ} > > does the trick -- except perhaps on Debian. Are you saying that if I > > want the setting of TZ to portably affect, e.g., localtime, that I need > > to always POSIX::tzset() after I do it? Seems a waste to load all of > > POSIX.pm just for that... > > I'm pretty sure you have to do that. For example, if you simply set > $ENV{TZ} then localtime() doesn't change in this script:
You have to call tzset() on some platforms when you change TZ at runtime. # this prints Tokyo time export TZ="Asia/Tokyo" perl -le 'print scalar localtime' # and this doesn't on Solaris but does on Gentoo perl -le '$ENV{TZ} = "Asia/Tokyo"; print scalar localtime' # and this always does perl -MPOSIX -le '$ENV{TZ} = "Asia/Tokyo"; POSIX::tzset; print scalar localtime' So there is a difference, on some platform(s), between inheriting the value of TZ from the environment and setting it at runtime. Using tzset() is the 'portable' thing to do. Didn't I answer an almost identical question from David a few months ago? -J --