我需要使用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)的正形式给出了正确的结果。
在这种情况下,我正在寻找最简单,最小的解决方案(尽可能避免使用大型复杂模块),所以这可能是我的解决方案,但是想知道是否有标准/建立这样做的方式?
答案 0 :(得分:16)
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中,但我从来没有遇到过不存在的安装。