2017-02-18 11 views
0

私はApache::Log::Parserを使用してApacheログファイルを解析しています。Time :: Piece with Apache :: Log :: Parserを使用する

次のコードを使用してログファイルから日付を抽出しました。

my $parser = Apache::Log::Parser->new(fast=>1); 
my $log = $parser->parse($data); 
$t = $log->{date}; 

今、私は日付を解析するためにTime::Pieceを使用しようとしましたが、私はそれを行うことができないんです。

print "$t->day_of_month"; 

しかし、機能しません。 Time :: Pieceを使用して日付を解析する方法

答えて

3

文字列補間内のオブジェクトのメソッドを呼び出すことはできません。

Sat Feb 18 12:44:47 2017->day_of_month 

は、メソッドを呼び出すために二重引用符""を削除します。それはこのような何かを、おそらく出力は以下となります。

print $t->day_of_month; 

は今、出力は次のようになります。あなたがあなたのログにエポック値を持っている場合、またはstrptimeを使用している場合localtimeまたはgmtimeと時間::ワンピースオブジェクトを作成する必要が

18 

注意日付は何らかのタイムスタンプです。

+0

二重引用符を削除してエラーをスローする 'パッケージまたはオブジェクト参照なしで 'day_of_monthメソッドを呼び出せません。' – Pradeep

+0

@Pradeepは私の答えの最後の部分を読みました。まずオブジェクトを作成する必要があります。 Time :: Pieceをドロップするだけで、ある値を魔法のように日付オブジェクトに変換することはありません。 – simbabque

+0

新しいTime :: Pieceオブジェクト '、' Time :: Piece-> strptime($ log - > {date}、 "%Y");を作成しようとしましたが、 'Cのエラー解析時間:/xampp/perl/lib/Time/Piece.pm line 469' – Pradeep