Глядя на реализацию W3CDTF, я думаю, что это может быть ошибка в библиотеке:
sub format_datetime
{
my ( $self, $dt ) = @_;
my $base = sprintf( '%04d-%02d-%02dT%02d:%02d:%02d',
$dt->year, $dt->month, $dt->day,
$dt->hour, $dt->minute, $dt->second );
my $tz = $dt->time_zone;
return $base if $tz->is_floating;
return $base . 'Z' if $tz->is_utc;
if (my $offset = $dt->offset()) {
return $base . offset_as_string($offset );
}
}
Обратите внимание, что если $tz->is_utc
является ложным, но $dt->offset()
равно 0, то ни один из них не набирает код return
, что, как мне кажется, в Perl означает, что nil неявно возвращается. Я думаю, что сценарий - это то, что происходит в моем примере сценария - «Европа / Лондон» технически не является UTC, но он все еще имеет смещение 0.
UPDATE
После нескольких дополнительных исследований я обнаружил, что об этой же ошибке уже сообщалось (2 года назад!). Отчет об ошибке содержит исправление, которое, по-видимому, решает проблему (хотя я лично не проверял это).
ОБНОВЛЕНИЕ 2
Исправление для этого выпущено