Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

What is the best way to convert yyyymmddhhmmss to YYYY-MM-DD hh:mm:ss and back in perl?

for example: 20130218165601 to 2013-02-18 16:56:01 and back? (can https://metacpan.org/module/Rose::DateTime do it)?

without regexp, if possible ;)

like image 578
alexbyk Avatar asked Dec 12 '22 05:12

alexbyk


1 Answers

A module is overkill for this.

# 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;

Rose::DateTime cannot parse the "packed" format as intended, but you could use 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)
);
like image 56
ikegami Avatar answered Dec 29 '22 13:12

ikegami