Преобразовать временную метку Unix в читаемую дату в Perl

У меня есть временные метки Unix (например, 1357810480, поэтому они в основном в прошлом). Как преобразовать их в читаемый формат даты с помощью Perl?

Ответы

Ответ 1

Вы можете использовать localtime для этого.

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

Ответ 2

Quick one one Liner:

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

Или, если у вас есть временные метки в файле, по одному в строке:

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

Ответ 3

Идеальное использование для Time::Piece (стандарт в Perl с 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

Ответ 4

Вы можете использовать

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

Но это немного проще с strftime:

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

localtime($time) можно заменить gmtime($time), если это более подходит.

Ответ 5

Или, если у вас есть файл со встроенными метками времени, вы можете конвертировать их на место с помощью:

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

Ответ 6

Мне понравился ответ JDawg, но он не смог заставить его работать правильно в системе RHEL, над которой я работал. Я смог заставить это работать. Надеюсь, это поможет кому-то. Он отображает содержимое файла с установленными временными метками.

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