tzset +设置TZ env变量在windows下不起作用

时间:2017-08-22 06:11:24

标签: perl timezone localtime

我正试图获得纽约当前时间。此代码在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中有替代方法吗?

2 个答案:

答案 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