perl减去时间并以秒为单位显示

时间:2014-12-19 22:09:57

标签: perl

我在过去30分钟内浏览了SO,但无法得到答案,所以决定发帖提问。

我无法在某些答案中使用Time::PieceDate::Parse模块。

我试图减去两次并在几秒钟内得到结果

use warnings;    
use strict;

$tod = `date "+%H:%M:%S"`; chomp $tod;  #record time of the day to variable
                                        #Sample time 16:55:44
my startTime = $tod;

 Insert records;

my endTime = $tod;

my totalTime = $startTime - $endTime;

错误: Arguemnt“16:55:14”在减法( - )

中不是数字

谢谢,

3 个答案:

答案 0 :(得分:6)

您可以使用time功能:

my $start = time;
sleep 3;
my $end = time;

print $end - $start, ' seconds elapsed';

一般情况下,最好避免使用反引号或system执行外部命令,只需使用纯Perl执行相同操作即可。

如果您想要超过一秒的分辨率,可以按照Time::HiRes

中的说明使用Is there a better way to determine elapsed time in Perl?

答案 1 :(得分:4)

Time :: Piece自从5.10开始使用Perl,这是七年前的事情,我对你声称无法使用它有点怀疑而且从长远来看它确实会造成很多不必要的痛苦不使用模块。您可以使用Module::CoreList检查这些内容。总之...

您可以将“HH:MM:SS”时间转换为午夜以来的秒数。幸运的是,你正在使用24小时的时间,这使得这更简单。

sub time_of_day_to_seconds {
    my $tod = shift;

    my($hour, $min, $sec) = split /:/, $tod;

    my $total_seconds  = $sec;
    $total_seconds    += $min * 60;
    $total_seconds    += $hour * 60 * 60;

    return $total_seconds;
}

答案 2 :(得分:1)

如果您无法避免将时间用作字符串,则可以将DateTime::Format::StrptimeDatetime::Duration结合使用。

请记住,您必须安装它,因为它不在核心模块中......无论如何这里是一个例子:

use warnings;    
use strict;
use DateTime::Format::Strptime;

my $strp = DateTime::Format::Strptime->new( pattern   => '%T', );

my $diff = $strp->parse_datetime("23:23:12") - $strp->parse_datetime("23:23:10");

print join('-',$diff->deltas()); #months-0-days-0-minutes-0-seconds-2-nanoseconds-0

希望这有帮助!