Perl 使用time::Piece分析时区时出错

Perl 使用time::Piece分析时区时出错,perl,Perl,执行一个简单的Perl脚本 use Time::Piece; my $t = Time::Piece->strptime('08:00 PM AST', "%I:%M %p %Z"); 我得到了以下错误:在/usr/local/lib/perl5/time/Piece.pm第469行解析时间时出错。 这是库中的错误还是上面的代码有问题?当我从输入字符串中删除AST时区时,它会工作,但当保留时区时,它会失败 我不知道输入字符串中的确切时区,所以我无法在我的一端调整该部分。AST(参见)是大

执行一个简单的Perl脚本

use Time::Piece;
my $t = Time::Piece->strptime('08:00 PM AST', "%I:%M %p %Z");
我得到了以下错误:在/usr/local/lib/perl5/time/Piece.pm第469行解析时间时出错。

这是库中的错误还是上面的代码有问题?当我从输入字符串中删除
AST
时区时,它会工作,但当保留时区时,它会失败


我不知道输入字符串中的确切时区,所以我无法在我的一端调整该部分。AST(参见)是大西洋时区的适当缩写,因此它应该可以工作。但事实并非如此

时区字段不明确,无法分析。例如,CST是中国标准时间、中央标准时间和古巴标准时间的缩写

表示
strtime
方法来自FreeBSD,其中
%Z
格式接受本地时区或
GMT
而不接受其他内容。这可能适用于
strtime
,但我只能确认,在我所在的位置,
GMT
是可接受的,而
UTC
AST
则不是


我建议的解决方案是预处理时间字符串,用明确的时区偏移量替换时区缩写。例如,
AST
(假设您指的是大西洋标准时间,而不是阿拉伯标准时间)将替换为
-0400
,因为它比UTC晚四小时。然后,您可以使用
%z
格式说明符对其进行分析,并获得正确的结果。

我已将其添加到我的答案中。如果它满足您的需要,那就好了。但是,您将获得Unix时间值,而不是
time::Piece
对象,并且它将错误地获得世界上大量的时区。
use Date::Parse;
my $t = str2time('08:00 PM AST');