我正在尝试将字符串转换为dt对象,如下所示:
use DateTime::Format::Strptime qw( );
my $strp = DateTime::Format::Strptime->new(
pattern => '%A%m%d_%Y',
on_error => 'croak',
);
my $string = 'Fri0215_2013';
print $strp->parse_datetime($string)->iso8601(), "n";
当我运行这个时,我一直得到Fri02 is not a recognised day in this locale.
,我看了strptime文档,它说本地是strptime
的可选属性,%A
或%a% (tried both) should match the abbreviated day name, e.g. 'Fri',
%m%应该匹配月份数,即。'02'和_
显然将匹配'_'(我希望!),并且%Y
将匹配年份包括世纪,即。"2013"有人能帮忙吗?
谢谢
DateTime::Format::Strptime
为%a%m%d_%Y
生成的正则表达式为:
/(w+)([d ]?d)([d ]?d)_(d{4})/
,其中(w+)
应该捕获工作日名称。问题是w
也匹配数字,所以对于字符串Fri0215_2013
,您得到以下内容:
weekday name: Fri02
month: 1
day: 5
year: 2013
为工作日名称生成正则表达式的代码应该为您的区域设置使用名称列表,但由于一个错误而退回到w+
。我提交了一个错误报告,所以希望这能很快得到修复。[更新:它已在1.55修复]
处理:
$string = s/^(...)(..)(..)_(....)/$1 $2 $3 $4/s;
和
pattern => '%a %m %d %Y'