2009-03-05 6 views
6

Ich durchlaufe zwei große Protokolldateien und möchte Zeitstempel vergleichen.Was ist der beste Weg, um mit Zeitmathematik in Perl umzugehen?

Ich habe bereits ein Perl-Skript geschrieben, um die passenden Protokollanweisungen zu finden, aber ich muss den Unterschied in den Zeitstempeln finden.

Zum Beispiel 15: 31: 19,430888 minus 15: 31: 19,427763

Gibt es gute Konstrukte für die mit der Zeit in Perl zu tun? Ich möchte mich nicht mit der Zeit beschäftigen, wenn ich es vermeiden kann.

+0

Verbringen Sie es lernen Python? annakata

+1

http://articles.techrepublic.com.com/5100-10878_11-6132371.html – grieve

Antwort

13

Sie können das CPAN-Modul DateTime verwenden.

z.

my $dt = DateTime->new( 
         year => 2009, 
         hour => 15, 
         minute => 31, 
         second => 19, 
         nanosecond => 430888 
); 
my $dt2 = DateTime->new( 
         year => 2009, 
         hour => 15, 
         minute => 31, 
         second => 19, 
         nanosecond => 427763 
); 
my $duration = $dt - $dt2; 

, die Ihnen ein DateTime::Duration Objekt aus, die Ergebnisse abzurufen.

+0

Gibt es ein solches Konstrukt in der Defaul Perl Lib? Nicht in CPAN? – Alex

+0

@windfinder: Ich glaube nicht, dass es da ist. Perl kommt mit einer ziemlich begrenzten Menge von Standard-Bibliotheken. – Powerlord

+0

wordfinder, wenn Sie nicht unten sehen, ist Time :: Piece in den Core-Bibliotheken in der neuesten Perl. Ich denke nicht, dass das ein guter Grund ist, etwas im Allgemeinen zu verwenden, aber Time :: Piece ist ziemlich gut. – skiphoppy

5

DateTime ist am besten, aber nur, wenn Sie daran denken, die subtract_datetime_absolute-Methode anstelle des überladenen Minus-Operators zu verwenden, wenn Sie eine Datumsrechnung mit Subtraktion durchführen. Dies ist der einzige Weg, um eine "Stoppuhrdauer" von zwei Datumszeiten zu erhalten, und nur die Stoppuhrdauer war für die Art der Datumsarithmetik, die ich mache, immer nützlich. Das DateTime :: Duration-Interface ist verwirrend und irreführend, besonders wenn Sie denken, dass Sie eine Stoppuhrdauer haben und Sie nicht.

People mentioned early on how confusing this was going to be aber es wurde nie korrigiert.

Das Time :: Piece-Modul ist eine gute Alternative. Ich würde sagen, dass es insgesamt nicht so nützlich wie DateTime ist, aber es vermeidet auf jeden Fall diese Art von Verwirrung. Ich bevorzuge DateTime, aber nur knapp.

+2

Time :: Piece kommt auch mit 5,10 für die "Ich möchte nur Core-Module" Menge. Normalerweise ein fehlgeleiteter Wunsch, aber ich dachte, ich würde es erwähnen. – Schwern