Unixのタイムスタンプがあります(たとえば、1357810480など)。これは主に過去のものです。 Perlを使用して、それらを読みやすい日付形式に変換するにはどうすればよいですか?UnixのタイムスタンプをPerlで読み取り可能な日付に変換する
答えて
これにはlocaltime
を使用できます。
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp);
あなたは
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)
で置換することができます。
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'は動作します。 –
クイックシェルワンライナー:
perl -le 'print scalar localtime 1357810480;'
Thu Jan 10 10:34:40 2013
それとも、あなたは1行に1つずつ、ファイルにタイムスタンプを持って起こる場合:あなたが持っている場合は、
perl -lne 'print scalar localtime $_;' <timestamps
優雅でシンプル –
これは受け入れられる回答である必要があります。他の人は、人が自分の日付でもっと深く欲しいときに使うことができます。タイムスタンプを見るだけのために、 'スカラーローカルタイム'が行われました。 – felwithe
かタイムスタンプが埋め込まれたファイルでは、次の場所でそれらを変換できます。
$ cat [file] | perl -pe 's/([\d]{10})/localtime $1/eg;'
それはまさに私が必要としていたものでした!ログファイルをperlの1行とBINGOの即時の日付/時刻にパイプすることができます。 – rob
私はJDawgの答えが気に入っていましたが、私が取り組んでいたRHELシステムでは正しく動作することができませんでした。私はこれを働かせることができました。うまくいけば、これは誰かを助けるでしょう。変換されたタイムスタンプを含むファイルの内容が表示されます。
cat filename | perl -pe 's/(\d+)/localtime($1)/e'
おかげで、私は、 '$のtime'で配列を置くこと、うん – hurley
を保存したいと思います。その後、時間は '$ time [2]'になります。 – Andomar
ありがとう、私はフォーマットされた日付を1つの変数に直接格納したいと思います。あなたはこれについてどんな可能性を見ますか?私の現在の解決策は、与えられたタイムスタンプがどれほど古いかにかかわらず、現在の日付を保存しているようです – hurley