如何在Perl中更改日期时间值的时区?
使用此功能:如何在Perl中更改日期时间值的时区?
perl -e 'use Time::Local; print timelocal("00","00","00","01","01","2000"),"\n";'
它会返回一个epochtime - 但只有在格林尼治标准时间 - 如果我想要的结果在GMT + 1(这是系统的本地时间(TZ)),我需要做什么改变?
由于提前,
安德斯
只有一个基于UTC的epochtime的标准定义,而不是不同时区的不同epochtimes。
如果你想找到offset between gmtime and localtime,使用
use Time::Local;
@t = localtime(time);
$gmt_offset_in_seconds = timegm(@t) - timelocal(@t);
你只需要设置时区。尝试:
env TZ=UTC+1 perl -e 'use Time::Local; print timelocal("00","00","00","01","01","2000"),"\n";'
TLA时区不明确,定义不清。最好使用[zoneinfo](http://en.wikipedia.org/wiki/Olson_database)名称:'TZ = Europe/Berlin perl ...' – daxim 2010-02-01 14:18:25
以下是直接链接到[有效时区列表字符串](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)aka'Zone.tab'。 – 2017-01-09 12:55:08
Time::Local::timelocal
是localtime
倒数。其结果将是在主机的本地时间:
$ perl -MTime::Local -le \ 'print scalar localtime timelocal "00","00","00","01","01","2000"' Tue Feb 1 00:00:00 2000
你想对应于该localtime
的gmtime
?
$ perl -MTime::Local' -le \ 'print scalar gmtime timelocal "00","00","00","01","01","2000"' Mon Jan 31 23:00:00 2000
你想它周围的其他方式,对应于该gmtime
的localtime
?
$ perl -MTime::Local -le \ 'print scalar localtime timegm "00","00","00","01","01","2000"' Tue Feb 1 01:00:00 2000
投票,很好的信息。谢谢。 – Anders 2010-02-01 15:16:34
虽然Time :: Local是一个合理的解决方案,但您最好使用更现代的DateTime面向对象模块。以下是一个示例:
use strict;
use DateTime;
my $dt = DateTime->now;
print $dt->epoch, "\n";
对于时区,可以使用DateTime :: TimeZone模块。
use strict;
use DateTime;
use DateTime::TimeZone;
my $dt = DateTime->now;
my $tz = DateTime::TimeZone->new(name => "local");
$dt->add(seconds => $tz->offset_for_datetime($dt));
print $dt->epoch, "\n";
CPAN链接:
use DateTime;
my $dt = DateTime->now;
$dt->set_time_zone('Europe/Madrid');
的其他例子基于DateTime::Format::Strptime
use strict;
use warnings;
use v5.10;
use DateTime::Format::Strptime;
my $s = "2016-12-22T06:16:29.798Z";
my $p = DateTime::Format::Strptime->new(
pattern => "%Y-%m-%dT%T.%NZ",
time_zone => "UTC"
);
my $dt = $p->parse_datetime($s);
$dt->set_time_zone("Europe/Berlin");
say join ' ', $dt->ymd, $dt->hms; # shows 2016-12-22 07:16:29
检查这些: [http://www.bestofperl.com/how -tos/timezone-conversion-date-time](http://www.bestofperl.com/how-tos/timezone-conversion-date-time)[http:// w (http://www.bestofperl.com/how-tos/parsing-datetime-strings) – Pradeep 2011-12-08 05:19:25