用Perl将时区名称转换为GMT时区偏移量



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

您可以使用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 %+gn", $dt->iso8601, $tz_name, $offset / 60 / 60);
    $dt->add( months => 6 );
}

输出:

Offset for 2015-02-18T18:20:30 in Europe/Istanbul is +2
Offset for 2015-08-18T18:20:30 in Europe/Istanbul is +3

可以使用以下方法获得偏移量:

$dt->offset

日期时间的偏移量可以根据数据时间而变化(主要是由于夏令时)。因此,只有当与获得偏移的特定日期时间结合使用时,偏移才有用。这意味着,除了格式化通信的日期时间之外,偏移量的合法用途很少。为此,您可能会发现%z strftime变量更有用。

$ perl -MDateTime -E'
   say DateTime->now( time_zone => "local" )->strftime("%Y-%m-%dT%H:%M:%S%z")
'
2015-02-18T10:52:40-0800

相关内容

  • 没有找到相关文章

最新更新