我有一个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