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

时间:2013-02-25 10:06:03

标签: perl timestamp

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

7 个答案:

答案 0 :(得分:29)

Quick shell one-liner:

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

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

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

答案 1 :(得分:19)

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

答案 2 :(得分:14)

您可以使用localtime

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

答案 3 :(得分:14)

您可以使用

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)代替。

答案 4 :(得分:6)

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

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

答案 5 :(得分:0)

我喜欢JDawg的答案,但无法在我正在开发的RHEL系统上正常工作。我能够让这个工作。希望这会对某人有所帮助。它显示已转换时间戳的文件内容。

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

答案 6 :(得分:0)

太多的答案,您也可以用gmtime代替localtime以获得UTC时间。我发现这在我的bash脚本中非常有用:

UTC:

echo 1357810480  | perl -nE 'say scalar gmtime $_'

本地:

echo 1357810480  | perl -nE 'say scalar localtime $_'

*如果在输出末尾不需要换行,则可以将say替换为print