2013-02-25 8 views

답변

12

localtime을 사용할 수 있습니다.

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

감사합니다,하지만 난'$의 time'의 배열을 둘 것 그, 그래 – hurley

+0

를 저장하고 싶습니다. 그 후에 시간은'$ time [2]'에있다. – Andomar

+0

감사합니다,하지만 난 하나의 변수에 직접 포맷 된 날짜를 저장하고 싶습니다. 이럴 가능성이 있습니까? 현재의 솔루션은 주어진 타임 스탬프가 얼마나 오래된 지 상관없이 현재 날짜를 저장하는 것으로 보입니다 – hurley

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

' '% f % T' '이 (아마도 로케일 때문에) 작동하지 않습니다. 그러나''% Y- % m- % d''이 효과적입니다. –

22

빠른 쉘 한 줄 :

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

또는, 당신은 한 줄에 하나씩, 파일에 타임 스탬프를 가지고 일 경우 : 당신이있는 경우,

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

우아하고 단순한 –

+2

이것은 대답이어야합니다. 다른 사람들은 사람들이 자신의 데이트에서 더 많은 것을 원할 때 사용될 수 있습니다. 그냥 타임 스탬프를보고,'스칼라 localtime', 완료. – felwithe

4

또는 파일에 타임 스탬프가 포함되어 있으면 다음 위치에서 해당 위치로 변환 할 수 있습니다.

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

정확히 내가 필요로했던 것이었다! 필자의 로그 파일을 perl one-liner와 BINGO 인스턴트 날짜/시간으로 파이프 할 수 있습니다. – rob

0

JDawg의 대답이 마음에 들었지만 제대로 작동하지 못했습니다. 나는 이것을 작동시킬 수 있었다. 바라기를 이것은 누군가를 도울 것입니다. 변환 된 시간 소인이있는 파일의 내용을 표시합니다.

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

관련 문제