我的脚本是:
use warnings;
use strict;
my $start_time = localtime();
$sql = "INSERT into Table1, Select (VAr1, Var2, Var3 ...........)";
my $end_time = localtime();
my $run_time = ($end_time - $start_time);
my @months = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
my ($sec, $min, $hour, $day,$month,$year) = (localtime($run_time))[0,1,2,3,4,5];
print "Unix time ".$run_time." converts to ".$months[$month]." ".$day.", ".($year +=1900);
print " ".$hour.":".$min.":".$sec."\n";
当我运行它时,我没有获得所需的输出。
Unix时间648转换为Jan,1900 ::
我需要得到小时:分:秒 脚本计算插入表中的时间。
谢谢
答案 0 :(得分:2)
$run_time
不是时间戳(自纪元以来代表日期时间的秒数),因此将其传递给localtime
是没有意义的。
my $s = $run_time % 60; $run_time = ($run_time - $s) / 60;
my $m = $run_time % 60; $run_time = ($run_time - $m) / 60;
my $h = $run_time;
my $formatted_run_time = sprintf "%d:%02d:%02d", $h, $m, $s;
你也可以变得更加漂亮:
my $formatted_run_time =
$h ? sprintf "%d:%02d:%02d", $h, $m, $s
$m ? sprintf "%d:%02d", $m, $s
$s;
答案 1 :(得分:1)
localtime
用于将unix时间戳转换为人类可读的时间(或其部分列表),但是您在几秒钟内给它一个持续时间。它会像时间戳一样对待它,并给你一个非常低的日期和时间。
print scalar localtime 648;
# gives Thu Jan 1 01:10:48 1970
您的代码提供以下输出:
Unix时间648转换为1970年1月1日1:10:48
问题在于你在这里混合了两个概念。
您可能希望使用Benchmark模块,这是出于此目的。
use strict;
use warning;
use Benchmark;
my $t0 = Benchmark->new;
# do your database stuff here
my $t1 = Benchmark->new;
my $td = timediff($t1, $t0);
print "the code took:",timestr($td),"\n";
如果您使用的是Linux或Unix,还可以使用the time
program来确保程序的整体运行时间。
$ time perl foo.pl
real 0m2.241s
user 0m2.236s
sys 0m0.000s
$