使用Time :: Piece解析时区时出错

时间:2014-01-14 01:18:41

标签: 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 (请参阅Wikipedia Atlantic Time Zone 的正确缩写,因此它应该有效。但事实并非如此!

2 个答案:

答案 0 :(得分:8)

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

module documentation表示strptime方法来自FreeBSD,其中%Z格式接受本地时区或GMT而不接受其他任何内容。这可能适用于strptime,但我只能确认,我找到的地方GMT是可以接受的,UTCAST不是。{/ p>

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

答案 1 :(得分:-1)

use Date::Parse;
my $t = str2time('08:00 PM AST');