2013-02-25 4 views

答えて

12

これにはlocaltimeを使用できます。

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

おかげで、私は、 '$のtime'で配列を置くこと、うん – hurley

+0

を保存したいと思います。その後、時間は '$ time [2]'になります。 – Andomar

+0

ありがとう、私はフォーマットされた日付を1つの変数に直接格納したいと思います。あなたはこれについてどんな可能性を見ますか?私の現在の解決策は、与えられたタイムスタンプがどれほど古いかにかかわらず、現在の日付を保存しているようです – 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 

それとも、あなたは1行に1つずつ、ファイルにタイムスタンプを持って起こる場合:あなたが持っている場合は、

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

優雅でシンプル –

+2

これは受け入れられる回答である必要があります。他の人は、人が自分の日付でもっと深く欲しいときに使うことができます。タイムスタンプを見るだけのために、 'スカラーローカルタイム'が行われました。 – felwithe

4

かタイムスタンプが埋め込まれたファイルでは、次の場所でそれらを変換できます。

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

それはまさに私が必要としていたものでした!ログファイルをperlの1行とBINGOの即時の日付/時刻にパイプすることができます。 – rob

0

私はJDawgの答えが気に入っていましたが、私が取り組んでいたRHELシステムでは正しく動作することができませんでした。私はこれを働かせることができました。うまくいけば、これは誰かを助けるでしょう。変換されたタイムスタンプを含むファイルの内容が表示されます。

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