在Perl中将时区名称转换为GMT时区偏移量?

Ash*_*hir 3 perl timezone timezone-offset

我有一个timzeone名称作为输入,例如' Europe/Istanbul'作为字符串.
如何从GMT(基于当前时间)获得当前偏移量,即+2作为输出?
PS,我正在使用DateTime :: TimeZone,如果这可能会有所帮助

AKH*_*and 8

您可以使用DateTime :: TimeZone的offset_for_datetime方法或DateTime的offset方法获取当前偏移量.DateTime对象是必需的,因为偏移量可能会根据日期时间而变化(主要是因为夏令时).

my $tz_name = 'Europe/Istanbul';

my $dt = DateTime->now( time_zone => $tz_name );
for (1..2) {
    my $offset = $dt->offset;
    printf("Offset for %s in %s is %+g\n", $dt->iso8601, $tz_name, $offset / 60 / 60);
    $dt->add( months => 6 );
}
Run Code Online (Sandbox Code Playgroud)

输出:

Offset for 2015-02-18T18:20:30 in Europe/Istanbul is +2
Offset for 2015-08-18T18:20:30 in Europe/Istanbul is +3
Run Code Online (Sandbox Code Playgroud)