我有一个CSV文件,其中日期的格式为ddMMMyyyy
或ddMMMyyyy:hh:mm:ss
(月份为英文,三个字母,全部大写缩写,其他数字为前导零)。我正在其他文件中使用正则表达式进行一些处理,但我不知道如何有效地转换月份(没有通过文件替换12次)。我需要将所有内容转换为更标准的yyyy-mm-dd
(带有前导零的所有数字)。
答案 0 :(得分:3)
你可以使用自2007年以来一直是Perl标准部分的Time :: Piece模块。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Piece;
my $fmt = '%d%b%Y';
$_ = '00039222910,12Jul1999,283.23,290.33,13Jul2013:12:50:01,13Jul2013:12:50:01,AH';
s/(\d\d\w\w\w\d\d\d\d)/convert($1)/ge;
say $_;
sub convert {
my $in = shift;
my $d;
eval { $d = Time::Piece->strptime($in, $fmt) };
return $@ ? $in : $d->ymd;
}