在Perl中将不同时区中的时间转换为本地时间?

在Perl中将不同时区中的时间转换为本地时间?,perl,Perl,Perl内置函数localtime可以将指定的日期时间值转换为本地时间,但它不接受时区号。对于不同的时区,最简单的转换方法是什么?导入其他模块看起来有点复杂,尤其是对于一个线性程序。Localtime()函数使用本地系统时区。您可以在使用TZ环境变量执行程序之前指定时区 下面是一个名为time.pl的perl脚本 #!/usr/bin/perl -w my $time = localtime; print $time; 使用和不使用TZ执行它的输出如下 ./time.pl Sun Aug

Perl内置函数localtime可以将指定的日期时间值转换为本地时间,但它不接受时区号。对于不同的时区,最简单的转换方法是什么?导入其他模块看起来有点复杂,尤其是对于一个线性程序。

Localtime()函数使用本地系统时区。您可以在使用TZ环境变量执行程序之前指定时区

下面是一个名为time.pl的perl脚本

#!/usr/bin/perl -w

my $time = localtime;
print $time;
使用和不使用TZ执行它的输出如下

./time.pl 
Sun Aug 16 00:12:33 2015 

TZ=GST ./time.pl 
Sat Aug 15 18:42:36 2015
函数的作用是:使用本地系统时区。您可以在使用TZ环境变量执行程序之前指定时区

下面是一个名为time.pl的perl脚本

#!/usr/bin/perl -w

my $time = localtime;
print $time;
使用和不使用TZ执行它的输出如下

./time.pl 
Sun Aug 16 00:12:33 2015 

TZ=GST ./time.pl 
Sat Aug 15 18:42:36 2015
函数的作用是:使用本地系统时区。您可以在使用TZ环境变量执行程序之前指定时区

下面是一个名为time.pl的perl脚本

#!/usr/bin/perl -w

my $time = localtime;
print $time;
使用和不使用TZ执行它的输出如下

./time.pl 
Sun Aug 16 00:12:33 2015 

TZ=GST ./time.pl 
Sat Aug 15 18:42:36 2015
函数的作用是:使用本地系统时区。您可以在使用TZ环境变量执行程序之前指定时区

下面是一个名为time.pl的perl脚本

#!/usr/bin/perl -w

my $time = localtime;
print $time;
使用和不使用TZ执行它的输出如下

./time.pl 
Sun Aug 16 00:12:33 2015 

TZ=GST ./time.pl 
Sat Aug 15 18:42:36 2015
我用约会时间

$ perl -MDateTime -E'say DateTime->now( time_zone => $ARGV[0] )' America/Toronto
2015-08-15T18:39:54

$ perl -MDateTime -E'say DateTime->now( time_zone => $ARGV[0] )' America/Halifax
2015-08-15T19:39:55
我用约会时间

$ perl -MDateTime -E'say DateTime->now( time_zone => $ARGV[0] )' America/Toronto
2015-08-15T18:39:54

$ perl -MDateTime -E'say DateTime->now( time_zone => $ARGV[0] )' America/Halifax
2015-08-15T19:39:55
我用约会时间

$ perl -MDateTime -E'say DateTime->now( time_zone => $ARGV[0] )' America/Toronto
2015-08-15T18:39:54

$ perl -MDateTime -E'say DateTime->now( time_zone => $ARGV[0] )' America/Halifax
2015-08-15T19:39:55
我用约会时间

$ perl -MDateTime -E'say DateTime->now( time_zone => $ARGV[0] )' America/Toronto
2015-08-15T18:39:54

$ perl -MDateTime -E'say DateTime->now( time_zone => $ARGV[0] )' America/Halifax
2015-08-15T19:39:55
将尊重TZ环境变量

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;

say scalar localtime->strftime('%F %T %Z');

foreach ('UTC', 'Europe/Paris', 'America/New_York') {
  $ENV{TZ} = $_;
  say scalar localtime->strftime('%F %T %Z');
}
输出(在伦敦运行时):

将尊重TZ环境变量

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;

say scalar localtime->strftime('%F %T %Z');

foreach ('UTC', 'Europe/Paris', 'America/New_York') {
  $ENV{TZ} = $_;
  say scalar localtime->strftime('%F %T %Z');
}
输出(在伦敦运行时):

将尊重TZ环境变量

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;

say scalar localtime->strftime('%F %T %Z');

foreach ('UTC', 'Europe/Paris', 'America/New_York') {
  $ENV{TZ} = $_;
  say scalar localtime->strftime('%F %T %Z');
}
输出(在伦敦运行时):

将尊重TZ环境变量

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;

say scalar localtime->strftime('%F %T %Z');

foreach ('UTC', 'Europe/Paris', 'America/New_York') {
  $ENV{TZ} = $_;
  say scalar localtime->strftime('%F %T %Z');
}
输出(在伦敦运行时):



似乎这只适用于类UNIX平台。事实上。。但我认为在其他操作系统中也必须有一个env变量才能更改时区。
TZ
也会影响Windows上的
localtime
。只是不确定要传递给它什么值。请注意,您应该在更改
$ENV{TZ}
后调用
POSIX::tzset()
。这似乎只适用于类UNIX平台。事实上。。但我认为在其他操作系统中也必须有一个env变量才能更改时区。
TZ
也会影响Windows上的
localtime
。只是不确定要传递给它什么值。请注意,您应该在更改
$ENV{TZ}
后调用
POSIX::tzset()
。这似乎只适用于类UNIX平台。事实上。。但我认为在其他操作系统中也必须有一个env变量才能更改时区。
TZ
也会影响Windows上的
localtime
。只是不确定要传递给它什么值。请注意,您应该在更改
$ENV{TZ}
后调用
POSIX::tzset()
。这似乎只适用于类UNIX平台。事实上。。但我认为在其他操作系统中也必须有一个env变量才能更改时区。
TZ
也会影响Windows上的
localtime
。只是不确定要传递给它什么值。请注意,您应该在更改
$ENV{TZ}
后调用
POSIX::tzset()
。这只是OP已经拒绝的答案的较长版本。Windows肯定不知道
Europe/Paris
。此外,在更改
$ENV{TZ}
后,您应该调用
POSIX::tzset()
。这只是OP已经拒绝的答案的较长版本。Windows肯定不知道
Europe/Paris
。此外,在更改
$ENV{TZ}
后,您应该调用
POSIX::tzset()
。这只是OP已经拒绝的答案的较长版本。Windows肯定不知道
Europe/Paris
。此外,在更改
$ENV{TZ}
后,您应该调用
POSIX::tzset()
。这只是OP已经拒绝的答案的较长版本。Windows肯定不知道
Europe/Paris
。而且,在更改
$ENV{TZ}
之后,应该调用
POSIX::tzset()