2008-11-17 5 views
6

Comment puis-je valider les chaînes de date en Perl? J'aimerais prendre en compte les années bissextiles et les fuseaux horaires. Quelqu'un peut entrer des dates dans les formats suivants:Comment puis-je valider des dates en Perl?

 
11/17/2008 
11/17/2008 3pm 
11/17/2008 12:01am 
11/17/2008 12:01am EST 
11/17/2008 12:01am CST 

Répondre

10

J'utilise DateTime::Format::DateManip pour des choses comme ça. En utilisant vos dates ....

use DateTime::Format::DateManip; 

my @dates = (
    '11/17/2008', 
    '11/17/2008 3pm', 
    '11/17/2008 12:01am', 
    '11/17/2008 12:01am EST', 
    '11/17/2008 12:01am CST', 
); 

for my $date (@dates) { 
    my $dt = DateTime::Format::DateManip->parse_datetime($date); 
    die "Cannot parse date $date" unless defined $dt; 
    say $dt; 
} 

# no dies.. produced the following.... 
# => 2008-11-17T00:00:00 
# => 2008-11-17T15:00:00 
# => 2008-11-17T00:01:00 
# => 2008-11-17T05:01:00 
# => 2008-11-17T06:01:00 

NB. Je suis sur GMT ici!

9

CPAN a beaucoup de paquets pour le traitement des dates, telles que DateTime et Date::Manip. Pour analyser votre date, le module Date :: Parse dans TimeDate peut fonctionner (oui, il existe à la fois DateTime et TimeDate).

En général, chaque fois que vous avez besoin de faire quelque chose en Perl, vérifiez le CPAN. Il y a probablement un module pour ça. Regardez ce qui est disponible et voyez ce qui correspond à votre situation.

Bonne chance, :)

+0

Notez que Date :: Parse ne détectera pas correctement les dates non valides. Par exemple: «1995-01-41T09: 08: 17» est interprété comme «1995-02-10T09: 08: 17» – Tincho

Questions connexes