$ perl -l use strict; use warnings; use DateTime; my $str = '2007_12_13_04_49_15'; $str =~ /^(\d+)_(\d+)_(\d+)_(\d+)_(\d+)/; my $dt = DateTime->new( year => $1, month => $2, day => $3, hour => $4, minute => $5 ); print $dt->ymd . ' ' . $dt->hms; $dt->add( days => -1 ); print $dt->ymd . ' ' . $dt->hms; __END__ 2007-12-13 04:49:00 2007-12-12 04:49:00