C'est le moyen le plus simple pour obtenir le temps unix:
use Time::Local;
timelocal($second,$minute,$hour,$day,$month-1,$year);
Remarque l'ordre inverse de l'argument et que janvier est le mois 0.
Pour beaucoup plus d'options, consultez la DateTime module CPAN.
Comme pour l'analyse, voir le Jour::Parse module CPAN. Si vous avez vraiment besoin pour obtenir la fantaisie avec la date de l'analyse, la Date::Manip peut être utile, mais de sa propre documentation vous avertit à l'écart car il porte beaucoup de bagages (il sait des choses comme le commun des affaires, des vacances, par exemple) et d'autres solutions sont beaucoup plus rapides.
Si vous connaissez quelque chose sur le format de la date/temps vous serez l'analyse d'une simple expression régulière peut suffire, mais vous êtes probablement mieux en utilisant le module CPAN. Par exemple, si vous connaissez les dates seront toujours en YMDHMS commande, utilisez le module CPAN DateTime::Format::ISO8601.
Pour ma propre référence, si rien d'autre, ci-dessous est une fonction que j'ai utiliser pour une application où je sais que les dates seront toujours en YMDHMS ordre de la totalité ou d'une partie de la "HMS" partie facultative. Il accepte tous les séparateurs (par exemple, "2009-02-15" ou "2009.02.15"). Il retourne le correspondant de temps unix (nombre de secondes depuis 1970-01-01 00:00:00 GMT), ou -1 s'il n'a pas pu l'analyser (ce qui signifie que vous feriez mieux d'être sûr que vous ne serez jamais légitimement besoin d'analyser la date 1969-12-31 23:59:59). Elle suppose également des années à deux chiffres XX jusqu'à "69" consultez "20XX", sinon "19XX" (par exemple, "50-02-15" signifie 2050-02-15 mais "75-02-15" signifie 1975-02-15).
use Time::Local;
sub parsedate {
my($s) = @_;
my($year, $month, $day, $hour, $minute, $second);
if($s =~ m{^\s*(\d{1,4})\W*0*(\d{1,2})\W*0*(\d{1,2})\W*0*
(\d{0,2})\W*0*(\d{0,2})\W*0*(\d{0,2})}x) {
$year = $1; $month = $2; $day = $3;
$hour = $4; $minute = $5; $second = $6;
$hour |= 0; $minute |= 0; $second |= 0; # defaults.
$year = ($year<100 ? ($year<70 ? 2000+$year : 1900+$year) : $year);
return timelocal($second,$minute,$hour,$day,$month-1,$year);
}
return -1;
}