执行简单的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 的正确缩写,因此它应该有效。但事实并非如此!
答案 0 :(得分:8)
时区字段不明确且无法解析。例如,CST是中国标准时间,中央标准时间和古巴标准时间的缩写。
module documentation表示strptime
方法来自FreeBSD,其中%Z
格式接受本地时区或GMT
而不接受其他任何内容。这可能适用于strptime
,但我只能确认,我找到的地方GMT
是可以接受的,UTC
和AST
不是。{/ p>
我建议的解决方案是预处理您的时间字符串,用明确的时区偏移替换时区缩写。例如,AST
(假设您的意思是大西洋标准时间而不是阿拉伯标准时间)将替换为-0400
,因为它比UTC落后四个小时。然后,您可以使用%z
格式说明符对其进行解析,并获得正确的结果。
答案 1 :(得分:-1)
use Date::Parse;
my $t = str2time('08:00 PM AST');