如何使用Perl确定机器设置的当前时区?

Cha*_*ens 8 perl

我曾经假设它会如此简单$ENV{TZ},但TZ环境变量没有设置,但date命令仍然知道我在EDT中,所以必须有其他方法来确定时区(除了说chomp(my $tz = qx/date +%Z/);).

Igo*_*kon 15

use POSIX;
print strftime("%Z", localtime()), "\n";
Run Code Online (Sandbox Code Playgroud)

  • 编写`使用POSIX qw(strftime)可能更好;`保存大约5ms并降低名称冲突加载其他常量的风险. (2认同)

Dav*_*sky 6

如果你想要比POSIX(但可能更慢)更便携的东西你可以使用DateTime :: TimeZone:

use DateTime::TimeZone;

print DateTime::TimeZone->new( name => 'local' )->name();
Run Code Online (Sandbox Code Playgroud)


Bea*_*ano 5

use POSIX;
localtime();
my ($std, $dst) = POSIX::tzname();
Run Code Online (Sandbox Code Playgroud)

tzname()允许您访问POSIX全局tzname- 但您需要首先调用localtime()它.