私はいくつかのUnixタイムスタンプを持っています(たとえば、1357810480なので、それらは主に過去のものです)。Perlを使用してそれらを読み取り可能な日付形式に変換するにはどうすればよいですか?
78945 次
7 に答える
36
クイック シェルのワンライナー:
perl -le 'print scalar localtime 1357810480;'
Thu Jan 10 10:34:40 2013
または、たまたまファイルにタイムスタンプがある場合は、1 行に 1 つずつ:
perl -lne 'print scalar localtime $_;' <timestamps
于 2013-02-25T23:19:50.807 に答える
20
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
于 2013-02-25T11:04:07.903 に答える
18
あなたが使うことができます
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)
より適切な場合は、で置き換えることができます。
于 2013-02-25T10:12:31.043 に答える
16
あなたはそのために使うことができますlocaltime
。
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp);
于 2013-02-25T10:07:24.870 に答える
6
または、タイムスタンプが埋め込まれたファイルがある場合は、次のように変換できます。
$ cat [file] | perl -pe 's/([\d]{10})/localtime $1/eg;'
于 2014-05-07T21:15:47.750 に答える
0
答えに追加しすぎると、UTC 時刻を取得するために localtime を gmtime に置き換えることもできます。これは、私の bash スクリプトで非常に便利であることがわかりました。
UTC:
echo 1357810480 | perl -nE 'say scalar gmtime $_'
ローカル:
echo 1357810480 | perl -nE 'say scalar localtime $_'
*出力の最後に改行が必要ない場合は に置き換えることができsay
ます。print
于 2020-07-02T23:24:09.160 に答える