Perl中的日期时间转换

时间:2012-02-10 09:36:47

标签: regex perl datetime

  

可能重复:
  yyyymmddhhmmss to YYYY-MM-DD hh:mm:ss in perl?

我有来自用户2012/02/10 00:00:00的日期时间,并希望将其更改为2012-02-10 00:00:00,我知道正则表达式可以执行此操作。有没有模块可以做到这一点?

2 个答案:

答案 0 :(得分:3)

使用tr

perl -le '$_="2012/02/10 00:00:00";tr|/|-|;print'

答案 1 :(得分:2)

这个模块太过分了。

(my $iso_date = $slashed_date) =~
   s{^(....)/(..)/(..) (..:..:..)\z}{$1-$2-$3 $4}s;

但如果你想要一个,那就是这个:

package My::Date::Converter;

use Exporter qw( import );
our @EXPORT = qw( date_converter );

sub date_converter {
   my ($slashed_date) = @_;
   (my $iso_date = $slashed_date) =~
       s{^(....)/(..)/(..) (..:..:..)\z}{$1-$2-$3 $4}s;
   return $iso_date;
}

1;

但是如果你想浪费大量的CPU,那么现有的模块可以做到这一点:

use DateTime::Format::Strptime qw( );

my $slashed_format = DateTime::Format::Strptime->new(
   pattern  => '%Y/%m/%d %H:%M:%S',
   on_error => 'croak',
);

my $iso_format = DateTime::Format::Strptime->new(
   pattern  => '%Y-%m-%d %H:%M:%S',
   on_error => 'croak',
);

my $iso_date = $iso_format->format_datetime(
   $slashed_format->parse_datetime($slashed_date)
);