web-dev-qa-db-fra.com

Convertir l'horodatage Unix en une date lisible en Perl

J'ai des horodatages Unix (par exemple, 1357810480, ils sont donc principalement du passé). Comment puis-je les transformer en un format de date lisible en utilisant Perl?

18
hurley

Vous pouvez utiliser localtime pour cela.

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

Quick Shell one-liner:

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

Ou, si vous avez les horodatages dans un fichier, un par ligne:

Perl -lne 'print scalar localtime $_;' <timestamps
28
Perleone

Une utilisation parfaite pour Time :: Piece (standard en Perl depuis 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
18
Dave Cross

Vous pourriez utiliser

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);

Mais c'est un peu plus simple avec strftime:

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

localtime($time) peut être remplacé par gmtime($time) s'il est plus approprié.

13
ikegami

Ou, si vous avez un fichier avec des horodatages incorporés, vous pouvez les convertir en place avec:

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