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

Pyr*_*cer 10 perl time

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

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

$seconds_passed = $seconds_later - $seconds_earlier;
if ($seconds_passed < 0) { $seconds_passed = 60 - abs($seconds_passed); }
Run Code Online (Sandbox Code Playgroud)

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

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

Zai*_*aid 16

Time::Piece 自Perl 5.9.5以来,它一直是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
Run Code Online (Sandbox Code Playgroud)