如何在Perl中减去两个HH:MM:SS次?

时间:2013-11-04 12:33:30

标签: perl time

我需要使用Perl从另一个时间减去一次。两次都是HH:MM:SS格式。

我可以简单地在冒号上分割时间字符串,然后对每组数字执行数学运算,这是相对简单的:

$seconds_passed = $seconds_later - $seconds_earlier;
if ($seconds_passed < 0) { $seconds_passed = 60 - abs($seconds_passed); }

等等分钟和小时,然后计算将每个结果转换为秒并将其相加的总时间。第二行是处理后一个数字实际上更高的情况,比如第一次是23:58:59而第二次是23:59:09,实际经过的秒数是10,但计算结果是给09-59 = -50,所以从60减去那个(50)的正形式给出了正确的结果。

在这种情况下,我正在寻找最简单,最小的解决方案(尽可能避免使用大型复杂模块),所以这可能是我的解决方案,但是想知道是否有标准/建立这样做的方式?

2 个答案:

答案 0 :(得分:16)

自从Perl 5.9.5以来,

Time::Piece已成为核心Perl发行版的一部分:

use strict;
use warnings;
use Time::Piece;

my $t1 = Time::Piece->strptime( '23:58:59', '%H:%M:%S' );
my $t2 = Time::Piece->strptime( '23:59:09', '%H:%M:%S' );

print ( $t2 - $t1 ); # 10

答案 1 :(得分:0)

如果您只对秒钟感兴趣,可以使用:

use strict;
use warnings;
use Date::Parse;

my $diff = str2time('23:59:09') - str2time('23:58:59');
print "$diff\n";

Date :: Parse显然没有包含在Perl中,但我从来没有遇到过不存在的安装。