25

私はいくつかのUnixタイムスタンプを持っています(たとえば、1357810480なので、それらは主に過去のものです)。Perlを使用してそれらを読み取り可能な日付形式に変換するにはどうすればよいですか?

4

7 に答える 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 に答える