将Unix时间戳转换为Perl中的可读日期

hur*_*ley 20 perl timestamp

我有一些Unix时间戳(例如,1357810480,所以它们主要在过去).如何使用Perl将它们转换为可读的日期格式?

Per*_*one 31

快速外壳单线:

perl -le 'print scalar localtime 1357810480;'
Thu Jan 10 10:34:40 2013
Run Code Online (Sandbox Code Playgroud)

或者,如果您碰巧在文件中有时间戳,则每行一个:

perl -lne 'print scalar localtime $_;' <timestamps
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.当人们想要更深入的日期时,可以使用其他的.只是看一个时间戳,`标量本地时间',完成. (3认同)

Dav*_*oss 20

完美地用于Time :: Piece(从5.10开始的Perl标准).

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
Run Code Online (Sandbox Code Playgroud)


And*_*mar 15

你可以用localtime它.

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp);
Run Code Online (Sandbox Code Playgroud)

  • 一种方法是`$formatted_time = scalar(localtime($unix_timestamp))`,或者使用[`Date::Format`](http://search.cpan.org/~gbarr/TimeDate-2.30/lib/Date/Format .pm), `$formatted_time = time2str("%D", $unix_timestamp);` (2认同)

ike*_*ami 15

你可以用

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);
Run Code Online (Sandbox Code Playgroud)

但它有点简单strftime:

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

localtime($time)gmtime($time)如果它更合适,可以用它代替.


JDa*_*awg 6

或者,如果您有一个包含嵌入时间戳的文件,您可以使用以下内容将它们转换为:

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