yyyymmddhhmmss到YYYY-MM-DD hh:mm:ss in perl?

ale*_*byk 4 perl datetime date

将yyyymmddhhmmss转换为YYYY-MM-DD的最佳方法是什么hh:mm:ss并返回perl?

例如:20130218165601到2013-02-18 16:56:01又回来了?(可以https://metacpan.org/module/Rose::DateTime这样做)?

没有正则表达式,如果可能的话;)

ike*_*ami 7

一个模块对此来说太过分了.

# Packed -> ISO
(my $iso_date = $packed_date) =~
   s/^(....)(..)(..)(..)(..)(..)\z/$1-$2-$3 $4:$5:$6/s;

# ISO -> Packed
(my $packed_date = $iso_date) =~
   s/^(....)-(..)-(..) (..):(..):(..)\z/$1$2$3$4$5$6/s;
Run Code Online (Sandbox Code Playgroud)

Rose :: DateTime无法按预期解析"压缩"格式,但您可以使用DateTime :: Format :: Strptime.

use DateTime::Format::Strptime qw( );
my $packed_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',
);

# Packed -> ISO
my $iso_date = $iso_format->format_datetime(
   $packed_format->parse_datetime($packed_date)
);

# ISO -> Packed
my $packed_date = $packed_format->format_datetime(
   $iso_format->parse_datetime($iso_date)
);
Run Code Online (Sandbox Code Playgroud)


TLP*_*TLP 6

快速解决方案sprintf.

my $date = sprintf "%s%s-%s-%s %s:%s:%s", $string =~ /(..)/g;
Run Code Online (Sandbox Code Playgroud)

然后回来:

my $foo = join '', $date =~ /\d+/g;
Run Code Online (Sandbox Code Playgroud)