2010-11-08 6 views
3

En supposant que j'ai un tas d'horodatages comme "11/05/2010 16: 27: 26.003", comment les analyser avec milliseconde en Perl. Essentiellement, je voudrais comparer l'horodatage pour voir s'ils sont avant ou après une heure spécifique.parse horodatage avec milliseconde en Perl

J'ai essayé d'utiliser Time :: Local, mais il semble que Time :: Local est seulement capable d'analyser la seconde. Et Time :: HiRes, d'autre part, n'est pas vraiment fait pour l'analyse de texte.

Merci, Derek

Répondre

8

Vous pouvez utiliser Time::Local et il suffit d'ajouter le .003 à lui:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Time::Local; 

my $timestring = "11/05/2010 16:27:26.003"; 
my ($mon, $d, $y, $h, $min, $s, $fraction) = 
    $timestring =~ m{(..)/(..)/(....) (..):(..):(..)([.]...)}; 
$y -= 1900; 
$mon--; 

my $seconds = timelocal($s, $min, $h, $d, $mon, $y) + $fraction; 

print "seconds: $seconds\n"; 
print "milliseconds: ", $seconds * 1_000, "\n"; 
+0

désolé pour la question apparemment banale. Je suis très nouveau à perl.Je me demande quel est le but de la ligne "$ timestring = ~ m {....."? – defoo

+1

@Derek C'est une regex. Le '.' correspond à n'importe quel caractère et les parenthèses (ie'() ') capturent cette partie de la chaîne, donc l'expression rationnelle correspond à la chaîne' $ timestring' capturant les bits qui nous intéressent (par exemple heure, minute, seconde, etc. .) et en éliminant les parties que nous n'avons pas (par exemple, les caractères '"/"'). Vous pouvez en savoir plus sur les regex dans [perldoc perlretut] (http://perldoc.perl.org/perlretut.html) et [perldoc perlre'] (http://perldoc.perl.org/perlre.html) –

+0

merci pour l'explication – defoo

12
use DateTime::Format::Strptime; 

my $Strp = new DateTime::Format::Strptime(
    pattern => '%m/%d/%Y %H:%M:%S.%3N', 
    time_zone => '-0800', 
); 

my $now = DateTime->now; 
my $dt = $Strp->parse_datetime('11/05/2010 23:16:42.003'); 
my $delta = $now - $dt; 

print DateTime->compare($now, $dt); 
print $delta->millisecond; 
+2

Et pour référence: http://search.cpan.org/dist/DateTime-Format-Strptime/lib/DateTime/Format/Strptime.pm#STRPTIME_PATTERN_TOKENS –