【发布时间】:2013-02-25 10:06:02
【问题描述】:
我有一些 Unix 时间戳(例如,1357810480,所以它们主要是过去的)。如何使用 Perl 将它们转换为可读的日期格式?
【问题讨论】:
我有一些 Unix 时间戳(例如,1357810480,所以它们主要是过去的)。如何使用 Perl 将它们转换为可读的日期格式?
【问题讨论】:
快速shell单线:
perl -le 'print scalar localtime 1357810480;'
Thu Jan 10 10:34:40 2013
或者,如果您碰巧在文件中有时间戳,则每行一个:
perl -lne 'print scalar localtime $_;' <timestamps
【讨论】:
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
【讨论】:
'%f %T' 对我不起作用(可能是因为我的语言环境),但 '%Y-%m-%d' 确实起作用。
Time::Piece->new(...) 而不是localtime(...)。
你可以使用
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) 如果更合适的话。
【讨论】:
您可以为此使用localtime。
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp);
【讨论】:
$time。在那之后,例如$time[2]。
$formatted_time = scalar(localtime($unix_timestamp)),或者使用Date::Format,$formatted_time = time2str("%D", $unix_timestamp);
或者,如果您有一个嵌入时间戳的文件,您可以使用以下方法将它们转换到位:
$ cat [file] | perl -pe 's/([\d]{10})/localtime $1/eg;'
【讨论】:
我喜欢 JDawg 的回答,但无法让它在我正在使用的 RHEL 系统上正常工作。我能够让它工作。希望这会对某人有所帮助。它显示带有转换后时间戳的文件内容。
cat filename | perl -pe 's/(\d+)/localtime($1)/e'
【讨论】:
添加到答案中,您还可以将 localtime 替换为 gmtime 以获得 UTC 时间。我发现这在我的 bash 脚本中非常有用:
世界标准时间:
echo 1357810480 | perl -nE 'say scalar gmtime $_'
本地:
echo 1357810480 | perl -nE 'say scalar localtime $_'
*如果您不需要在输出末尾换行,您可以将say 替换为print。
【讨论】: