在CSV文件中格式化三个月的月份日期

时间:2014-03-18 10:40:46

标签: regex perl csv

我有一个CSV文件,其中日期的格式为ddMMMyyyyddMMMyyyy:hh:mm:ss(月份为英文,三个字母,全部大写缩写,其他数字为前导零)。我正在其他文件中使用正则表达式进行一些处理,但我不知道如何有效地转换月份(没有通过文件替换12次)。我需要将所有内容转换为更标准的yyyy-mm-dd(带有前导零的所有数字)。

1 个答案:

答案 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;
}