在Perl中处理时间数学的最佳方法是什么?

时间:2009-03-05 16:28:03

标签: perl time

我正在运行两个大型日志文件,我想比较时间戳。

我已经编写了一个Perl脚本来查找匹配的日志语句,但我需要找到时间戳的差异。

例如,15:31:19.430888减去15:31:19.427763

在Perl中处理时间有什么好的结构吗?如果我可以避免,我不想自己处理时间数学。

2 个答案:

答案 0 :(得分:13)

您可以使用DateTime CPAN模块。

例如

my $dt = DateTime->new( 
                      year   => 2009,
                      hour   => 15,
                      minute => 31,
                      second => 19,
                      nanosecond => 430888
);
my $dt2 = DateTime->new( 
                      year   => 2009,
                      hour   => 15,
                      minute => 31,
                      second => 19,
                      nanosecond => 427763
);
my $duration = $dt - $dt2;

将为您提供DateTime::Duration对象,以便从。

中检索结果

答案 1 :(得分:5)

DateTime是最好的,但只有当你做任何涉及减法的日期数学时,你才记得使用subtract_datetime_absolute方法而不是重载减号运算符。这是从两个日期时间中获得“秒表持续时间”的唯一方法,只有秒表持续时间对我所做的日期算术有用。 DateTime :: Duration界面令人困惑和误导,特别是当你认为你有一个秒表持续时间而你却没有。

People mentioned early on how confusing this was going to be但它从未得到纠正。

Time :: Piece模块是一个很好的选择。我不得不说整体它没有DateTime那么有用,但它绝对避免了这种混乱。我更喜欢DateTime,但只是勉强。