在Perl中,我想在特定的时区查找当地时间.我一直在使用这种技术:
$ENV{TZ} = 'America/Los_Angeles';
my $Now = scalar localtime;
print "It is Now $Now\n";
# WORKS: prints the current time in LA
但是,这并不可靠 – 特别是如果在设置$ENV {TZ}之前预先添加另一个localtime()调用,则会中断:
localtime();
$ENV{TZ} = 'America/Los_Angeles';
my $Now = scalar localtime;
print "It is Now $Now\n";
# FAILS: prints the current time for here instead of LA
有没有更好的方法来做到这一点?
解决方法
使用
POSIX::tzset.
use POSIX qw(tzset);
my $was = localtime;
print "It was $was\n";
$ENV{TZ} = 'America/Los_Angeles';
$was = localtime;
print "It is still $was\n";
tzset;
my $Now = localtime;
print "It is Now $Now\n";
$perl -v This is perl,v5.8.8 built for x86_64-linux-thread-multi copyright 1987-2006,Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License,which may be found in the Perl 5 source kit. Complete documentation for Perl,including FAQ lists,should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet,point your browser at http://www.perl.org/,the Perl Home Page. $perl tzset-test.pl It was Wed Apr 15 15:58:10 2009 It is still Wed Apr 15 15:58:10 2009 It is Now Wed Apr 15 12:58:10 2009