2013-02-25 155 views

回答

12

您可以使用localtime

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

谢谢,但我想存储 – hurley 2013-02-25 10:08:24

+0

是啊,这将使在'$ time'数组。之后,小时在'$ time [2]'例如。 – Andomar 2013-02-25 10:09:31

+0

谢谢,但我想直接在一个变量中存储格式化的日期。你有看到这种可能吗?我的当前解决方案似乎可以保存当前日期,不管给定时间戳的年龄有多大 – hurley 2013-02-25 10:11:05

12

你可以使用

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)如果是比较合适的替代。

15

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 
+0

''%f%T''不适用于我(也许是因为我的区域设置),但'%Y%m-%d''确实有效。 – 2017-08-27 02:44:28

22

快速壳的一行:

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

或者,如果你碰巧有时间戳的文件,每行一个:

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

优雅而简单 – 2013-10-22 17:00:48

+2

这应该是被接受的答案。其他人可以在人们希望在他们的日期更深入时使用。只是看一个时间戳,'标量本地时间',完成。 – felwithe 2016-03-30 21:09:41

4

或者,如果你有一个带有嵌入时间戳的文件,您可以将其转换为:

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

这正是我需要的!我可以将我的日志文件输入到perl单线程和BINGO即时日期/时间。 – rob 2015-09-11 14:41:10

0

我喜欢JDawg的回答,但无法在我正在研究的RHEL系统上正常工作。我能够得到这个工作。希望这会帮助某人。它显示转换后的时间戳文件的内容。

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

相关问题