我正试图获得纽约当前时间。此代码在Linux下运行,但在Windows下提供本地时间。
use POSIX qw(tzset);
sub is_time
{
$ENV{TZ} = 'America/New_York';
tzset();
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
if (($hour > 9 && $hour < 14) || ($hour == 9 && $min > 30))
{
return 1;
}
else
{
return 0;
}
}
我做错了什么?在Windows中有替代方法吗?
答案 0 :(得分:1)
use DateTime qw( );
my $dt = DateTime->now( time_zone => 'America/New_York' );
return $dt->hour > 9 && $dt->hour < 14 || $dt->hour == 9 && $dt->minute > 30;
答案 1 :(得分:0)
Windows不使用Olson时区。
尝试$ENV{TZ} = 'EST5EDT';
例如,
use feature qw( say );
use POSIX qw( tzset );
for my $tz (qw( EST5EDT PST8PDT )) {
local $ENV{TZ} = $tz;
tzset();
say("$tz: ", scalar(localtime));
}
输出:
EST5EDT: Tue Aug 22 22:14:04 2017
PST8PDT: Tue Aug 22 19:14:04 2017