1

次のタイムスタンプ形式でログデータを読み込んでいます。

Sat Aug 07 04:42:21 2010

私はそれを次のようなものに変換したいと思います:

20100807044221

Perlでこれを行うための最良の方法は何ですか?ありがとう。

4

4 に答える 4

5

Time::Pieceを使用します。(Perl 5.10以降のコアモジュール。)

#!/usr/bin/perl

use strict;
use warnings;

use Time::Piece;

my $timestamp1 = 'Sat Aug 07 04:42:21 2010';
my $time = Time::Piece->strptime($timestamp1, '%a %b %d %H:%M:%S %Y');
my $timestamp2 = $time->strftime('%Y%m%d%H%M%S');
于 2010-08-19T21:22:40.127 に答える
2

これがDate::Parseの目的です。

(ドキュメントからコピーした)のように、言語と対応する日付形式を指定します。

        $lang = Date::Language->new('German');
        $lang->str2time("25 Jun 1996 21:09:55 +0100");

上記は「エポック」値、別名unix時間値(必要なもの)を返します。

編集:投稿に関しては、yyyy-mmm-dddなどの正規の日付文字列のみが必要です。したがって、そのためにPOSIX::strftimeを呼び出すことができます。さらに、日付形式はデフォルトであるため、言語呼び出しは必要ありません。

...
use Date::Parse;
use POSIX qw(strftime);

my $sec = str2time('Sat Aug 07 04:42:21 2010');
my $ymd = strftime "%Y%m%d%H%M%S", gmtime($sec);

print "$ymd\n";
...

結果:

20100807024221

よろしく

rbo

于 2010-08-19T20:49:52.953 に答える
2

Date::Parseすべてのシステムにインストールされていない可能性があるため、次のスニペットを使用することをお勧めします。


my ($sec, $min, $hour, $mday, $mon, $year) = localtime();

my $timestamp = sprintf( "%04d%02d%02d%02d%02d%02d",
                          $year+1900, $mon+1, $mday, $hour, $min, $sec);

print("Timestamp: $timestamp\n");

Timestamp: 20100819135418

于 2010-08-19T20:59:54.127 に答える
1

perl -MPOSIX -le'print strftime "%Y%m%d%H%M%S", localtime'

気にしないでください。最初に解析する必要があります。それはあなたのフォーマットでそれを印刷するだけです。

于 2010-08-19T21:10:16.033 に答える