2013-02-25 8 views

risposta

12

È possibile utilizzare localtime per quello.

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp); 
+0

grazie, ma mi piacerebbe conservare il – hurley

+0

Sì, che avrebbe messo la matrice in '$ time'. Dopo che l'ora è in '$ tempo [2]' per esempio. – Andomar

+0

grazie, ma mi piacerebbe memorizzare la data formattata direttamente in una singola variabile. vede qualche possibilità per questo? la mia soluzione attuale sembra salvare la data corrente, non importa quanti anni ha il timestamp specificato è – hurley

12

Si potrebbe utilizzare

my ($S, $M, $H, $d, $m, $Y) = localtime($time); 
$m += 1; 
$Y += 1900; 
my $dt = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $Y,$m, $d, $H, $M, $S); 

Ma è un po 'più semplice con strftime:

use POSIX qw(strftime); 
my $dt = strftime("%Y-%m-%d %H:%M:%S", localtime($time)); 

localtime($time) può essere sostituito con gmtime($time) se è più appropriata.

15

Un uso perfetto per Time::Piece (standard in Perl dal 5.10).

use 5.010; 
use Time::Piece; 

my $unix_timestamp = 1e9; # for example; 

my $date = localtime($unix_timestamp)->strftime('%F %T'); # adjust format to taste 

say $date; # 2001-09-09 02:46:40 
+0

''% f% T'' non funziona per me (forse a causa della mia locale), ma''% Y-% m-% d''funziona. –

22

guscio rapida one-liner:

perl -le 'print scalar localtime 1357810480;' 
Thu Jan 10 10:34:40 2013 

O, se vi capita di avere i timestamp in un file, uno per riga:

perl -lne 'print scalar localtime $_;' <timestamps 
+0

elegante e semplice –

+2

Questa dovrebbe essere la risposta accettata. Gli altri possono essere usati quando le persone vogliono più profondità nelle loro date. Basta guardare un timestamp, 'scalar localtime', fatto. – felwithe

4

Oppure, se si dispone di un file con data/ora incorporate, è possibile convertirli con:

$ cat [file] | perl -pe 's/([\d]{10})/localtime $1/eg;' 
+1

Questo era esattamente ciò di cui avevo bisogno! Posso semplicemente reindirizzare il mio file di log in quel perl one-liner e la data/ora istantanea di BINGO. – rob

0

Mi è piaciuta la risposta di JDawg ma non riuscivo a farla funzionare correttamente su un sistema RHEL su cui stavo lavorando. Sono stato in grado di farlo funzionare. Speriamo che questo possa aiutare qualcuno. Visualizza i contenuti di un file con i timestamp convertiti sul posto.

cat filename | perl -pe 's/(\d+)/localtime($1)/e'