2009-03-05 13 views
6

Sto passando attraverso due file di registro di grandi dimensioni e voglio confrontare i timestamp.Qual è il modo migliore per gestire la matematica del tempo in Perl?

Ho già scritto uno script Perl per trovare le istruzioni di registro corrispondenti, ma ho bisogno di trovare la differenza nei timestamp.

Per esempio, 15: 31: 19,430,888 mila meno 15: 31: 19,427763

Ci sono buoni costrutti per trattare con il tempo in Perl? Non voglio occuparmi della matematica del tempo da solo se posso evitarlo.

+0

Spendilo imparando Python? annakata

+1

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

risposta

13

È possibile utilizzare il modulo CPAN DateTime.

es.

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; 

che vi darà un oggetto DateTime::Duration per recuperare i risultati da.

+0

Esiste un tale costrutto nella versione per lib di defaul? Non in CPAN? – Alex

+0

@windfinder: non credo che ci sia. Perl viene fornito con un insieme abbastanza limitato di librerie predefinite. – Powerlord

+0

wordfinder, nel caso in cui non si vedesse di seguito, Time :: Piece è nelle librerie core nell'ultimo Perl. Non penso che sia una buona ragione per usare qualcosa, in generale, ma Time :: Piece è abbastanza buono. – skiphoppy

5

DateTime è il migliore, ma solo se si ricorda di utilizzare il metodo subtract_datetime_absolute anziché l'operatore meno sovraccarico quando si esegue una data matematica con sottrazione. Questo è l'unico modo per ottenere una "durata del cronometro" su due datetimes, e solo la durata del cronometro è stata sempre utile per il tipo di aritmetica della data che faccio. L'interfaccia DateTime :: Duration è confusa e fuorviante, specialmente quando pensi di avere una durata del cronometro e non lo fai.

People mentioned early on how confusing this was going to be ma non è mai stato corretto.

Il modulo Time :: Piece è una buona alternativa. Devo dire che nel complesso non è così utile come DateTime, ma evita sicuramente questo tipo di confusione. Preferisco DateTime, ma a malapena.

+2

Time :: Piece viene fornito con 5.10 per la folla di "I want only core modules". Di solito un desiderio errato, ma ho pensato di parlarne. – Schwern

Problemi correlati