我有一些Unix时间戳(例如,1357810480,所以它们主要是过去的)。我如何使用Perl将它们转换为可读的日期格式?
bnlyeluc1#
快速shell单行程序:
perl -le 'print scalar localtime 1357810480;' Thu Jan 10 10:34:40 2013
或者,如果文件中碰巧有时间戳,每行一个:
perl -lne 'print scalar localtime $_;' <timestamps
cbjzeqam2#
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
l0oc07j23#
你可以用
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的情况要简单一些:
strftime
use POSIX qw( strftime ); my $dt = strftime("%Y-%m-%d %H:%M:%S", localtime($time));
如果localtime($time)更合适的话,可以用gmtime($time)代替。
localtime($time)
gmtime($time)
nwnhqdif4#
您可以使用localtime来实现这一点。
localtime
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp);
tvz2xvvm5#
或者,如果您有一个带有嵌入式时间戳的文件,则可以使用以下命令就地转换它们:
cat [file] | perl -pe 's/([\d]{10})/localtime $1/eg;'
pjngdqdw6#
为了补充这个问题,你还可以用gmtime替换localtime,以得到UTC时间。我发现这在我的Bash脚本中非常有用:协调世界时:
echo 1357810480 | perl -nE 'say scalar gmtime $_'
本地:
echo 1357810480 | perl -nE 'say scalar localtime $_'
如果您不需要在输出的末尾添加新行,则可以将say替换为print。
say
print
qybjjes17#
我喜欢JDawg的答案,但无法让它在我正在使用的RHEL系统上正常工作。我能够让它工作。希望这会帮助一些人。它显示文件的内容,并在适当的位置转换时间戳。cat filename | perl -pe 's/(\d+)/localtime($1)/e'
cat filename | perl -pe 's/(\d+)/localtime($1)/e'
7条答案
按热度按时间bnlyeluc1#
快速shell单行程序:
或者,如果文件中碰巧有时间戳,每行一个:
cbjzeqam2#
Time::Piece(Perl 5.10以来的标准)的完美使用。
l0oc07j23#
你可以用
但
strftime
的情况要简单一些:如果
localtime($time)
更合适的话,可以用gmtime($time)
代替。nwnhqdif4#
您可以使用
localtime
来实现这一点。tvz2xvvm5#
或者,如果您有一个带有嵌入式时间戳的文件,则可以使用以下命令就地转换它们:
pjngdqdw6#
为了补充这个问题,你还可以用gmtime替换localtime,以得到UTC时间。我发现这在我的Bash脚本中非常有用:
协调世界时:
本地:
如果您不需要在输出的末尾添加新行,则可以将
say
替换为print
。qybjjes17#
我喜欢JDawg的答案,但无法让它在我正在使用的RHEL系统上正常工作。我能够让它工作。希望这会帮助一些人。它显示文件的内容,并在适当的位置转换时间戳。
cat filename | perl -pe 's/(\d+)/localtime($1)/e'