DateTime:Formatとか

use strict;
use warnings;

use Benchmark qw/:all/;
use DateTime::Format::Strptime;
use DateTime::Format::MySQL;
use Time::Piece;
use Time::Piece::MySQL;

my $strp = DateTime::Format::Strptime->new(
    pattern => "%Y-%m-%d %H:%M:%S"
);

cmpthese(-1, {
    mysql => sub {
        DateTime::Format::MySQL->parse_datetime('2003-01-16 23:12:01');
    },
    strptime => sub {
        my $strp = DateTime::Format::Strptime->new(
            pattern => "%Y-%m-%d %H:%M:%S"
        );
        $strp->parse_datetime("2003-01-16 23:12:01");
    },
    strptime_use_instance => sub {
        $strp->parse_datetime("2003-01-16 23:12:01");
    },
    time_piece => sub {
        Time::Piece->strptime("2003-01-16 23:12:01", "%Y-%m-%d %H:%M:%S");
    },
    time_piece_mysql => sub {
        Time::Piece->from_mysql_datetime("2003-01-16 23:12:01");
    }
});

Rate strptime strptime_use_instance mysql time_piece_mysql time_piece
strptime 1999/s -- -42% -66% -98% -99%
strptime_use_instance 3446/s 72% -- -42% -97% -98%
mysql 5946/s 197% 73% -- -95% -96%
time_piece_mysql 121662/s 5986% 3430% 1946% -- -22%
time_piece 156392/s 7723% 4438% 2530% 29% --