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