将Time::Piece与Apache::Log::Parser一起使用
我正在使用解析Apache日志文件 我使用以下代码从日志文件中提取了日期将Time::Piece与Apache::Log::Parser一起使用,apache,perl,parsing,cpan,Apache,Perl,Parsing,Cpan,我正在使用解析Apache日志文件 我使用以下代码从日志文件中提取了日期 my $parser = Apache::Log::Parser->new(fast=>1); my $log = $parser->parse($data); $t = $log->{date}; 现在,我尝试使用解析日期,但我无法做到这一点 print "$t->day_of_month"; 但是,它不起作用。如何使用Time::Piece解析日期?您不能在字符串插值内的对象上调用方法
my $parser = Apache::Log::Parser->new(fast=>1);
my $log = $parser->parse($data);
$t = $log->{date};
现在,我尝试使用解析日期,但我无法做到这一点
print "$t->day_of_month";
但是,它不起作用。如何使用Time::Piece解析日期?您不能在字符串插值内的对象上调用方法。它可能会输出如下内容:
Sat Feb 18 12:44:47 2017->day_of_month
删除双引号以调用该方法
print $t->day_of_month;
现在输出为:
18
请注意,如果日志中有历元值,则需要使用
localtime
或gmtime
创建Time::Piece对象,如果日期是某种时间戳,则需要使用strptime
。不能在字符串插值内的对象上调用方法。它可能会输出如下内容:
Sat Feb 18 12:44:47 2017->day_of_month
删除双引号以调用该方法
print $t->day_of_month;
现在输出为:
18
请注意,如果日志中有历元值,则需要使用
localtime
或gmtime
创建Time::Piece对象,如果日期是某种时间戳,则需要使用strtime
。删除双引号,并抛出错误无法调用方法“day\u of\u month”没有包或对象参考
@Pradeep阅读我答案的最后一部分。您需要先创建一个对象。仅仅将时间::片段放入不会神奇地将某些值转换为日期对象。尝试创建一个新的Time::片段对象,Time::片段->strtime($log->{date},“%Y”)
但在C:/xampp/perl/lib/time/Piece.pm第469行持续抛出错误错误解析时间读取错误消息,并查看日期字符串<代码>%Y
仅为四位数的年份,如2017年。你需要完整的时间戳。你读过@Pradeep的文档了吗?Time::Piece docs链接,清楚地解释了它是如何工作的<代码>%d/%b/%Y
应该匹配31/Jul/1999
。删除双引号并引发错误在没有包或对象引用的情况下无法调用方法“每月的第几天”
@Pradeep阅读我答案的最后部分。您需要先创建一个对象。仅仅将时间::片段放入不会神奇地将某些值转换为日期对象。尝试创建一个新的Time::片段对象,Time::片段->strtime($log->{date},“%Y”)
但在C:/xampp/perl/lib/time/Piece.pm第469行持续抛出错误错误解析时间读取错误消息,并查看日期字符串<代码>%Y
仅为四位数的年份,如2017年。你需要完整的时间戳。你读过@Pradeep的文档了吗?Time::Piece docs链接,清楚地解释了它是如何工作的<代码>%d/%b/%Y
应匹配1999年7月31日
。