Ho alcuni timestamp Unix (ad esempio, 1357810480, quindi sono principalmente nel passato). Come posso trasformarli in un formato data leggibile usando Perl?Converti timestamp Unix in una data leggibile in Perl
risposta
È possibile utilizzare localtime
per quello.
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp);
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.
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
''% f% T'' non funziona per me (forse a causa della mia locale), ma''% Y-% m-% d''funziona. –
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
elegante e semplice –
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
Oppure, se si dispone di un file con data/ora incorporate, è possibile convertirli con:
$ cat [file] | perl -pe 's/([\d]{10})/localtime $1/eg;'
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
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'
grazie, ma mi piacerebbe conservare il – hurley
Sì, che avrebbe messo la matrice in '$ time'. Dopo che l'ora è in '$ tempo [2]' per esempio. – Andomar
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