mmr*_*tnt 1 perl time elapsed localtime
我一定做错了,但我无法弄明白.当我将秒作为localtime()的参数时,我得到秒和16小时.
my $startTime = time;
(process)
my $endTime = time;
my $diffTime = ( $endTime - $startTime );
($sec,$min,$hour) = localtime( $diffTime );
print STDERR "diffTime = $diffTime\n";
print STDERR "hour = $hour\n";
print STDERR "min= $min\n";
print STDERR "sec = $sec\n";
print( sprintf( "Elapsed time : %02d:%02d:%02d\n", $hour, $min, $sec ) );
Run Code Online (Sandbox Code Playgroud)
...始终打印:
diffTime = 4
hour = 16
min= 0
sec = 4
Elapsed time : 16:00:04
Run Code Online (Sandbox Code Playgroud)
好的.弄清楚如何添加评论 - NoScript设置太紧.
谢谢...
我似乎无法在这个帖子中添加评论,所以我要感谢大家.
不使用gmtime是问题所在.它可能不是最有效的解决方案,但它适用于我需要的东西,这只是一个简单的信息,用户可以评估他/她可能等待例程完成的时间并决定输入的大小他/她很熟悉的数据集.
你正在混合持续时间和时间戳,这就是在寻找麻烦...你可能会gmtime像Mansoor建议的那样逃避使用,但是,你仍然使用苹果作为橙色.
以下工作,并使用核心Time :: Piece和Time :: Seconds模块.因为$diffTime->pretty,你需要一个更新版本(1.20)的Time :: Piece,而不是与当前版本的Perl捆绑在一起.
use strict;
use warnings;
use 5.010;
use Time::Piece 1.20;
my $startTime = localtime();
# (process)
my $endTime = localtime();
my $diffTime = ( $endTime - $startTime );
say STDERR "diffTime = ", $diffTime;
say STDERR "hours = ", $diffTime->hours; # not the same thing as above
say STDERR "minutes = ", $diffTime->minutes; # not the same thing as above
say STDERR "seconds = ", $diffTime->seconds; # not the same thing as above
say "Elapsed time: ", $diffTime->pretty;
Run Code Online (Sandbox Code Playgroud)
这可能会打印如下:
150
0.0416666666666667
2.5
150
2 minutes, 30 seconds
Run Code Online (Sandbox Code Playgroud)
$difftime是两个"纪元时代"之间的差异(自格林威治标准时间1970年1月1日午夜起的秒数),但这并不是一个纪元时间.所以这不是一个合适的论据localtime().你最好自己计算h/m/s细分:
($sec,$min,$hour) = ($difftime % 60, int($difftime/60) % 60, int($difftime/3600));
Run Code Online (Sandbox Code Playgroud)