如何在Perl中计算localtime并将其转换为unix时间戳
我的剧本是:如何在Perl中计算localtime并将其转换为unix时间戳,perl,Perl,我的剧本是: 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
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转换为1900年1月:
我需要得到小时:分钟:秒
脚本计算插入到表中所用的时间
谢谢
localtime
用于将unix时间戳转换为人类可读的时间(或部分时间的列表),但您给它以秒为单位的持续时间。它会把它当作一个时间戳,给你一个非常低的日期和时间
print scalar localtime 648;
# gives Thu Jan 1 01:10:48 1970
您的代码提供以下输出:
Unix时间648转换为1970年1月1日1:10:48
问题是,这里基本上混合了两个概念
您可能希望改用模块,该模块正是为此目的而设计的
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上,还可以使用来测量程序的总体运行时间
$ time perl foo.pl
real 0m2.241s
user 0m2.236s
sys 0m0.000s
$
localtime
用于将unix时间戳转换为人类可读的时间(或部分时间的列表),但您要给它以秒为单位的持续时间。它会把它当作一个时间戳,给你一个非常低的日期和时间
print scalar localtime 648;
# gives Thu Jan 1 01:10:48 1970
您的代码提供以下输出:
Unix时间648转换为1970年1月1日1:10:48
问题是,这里基本上混合了两个概念
您可能希望改用模块,该模块正是为此目的而设计的
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上,还可以使用来测量程序的总体运行时间
$ time perl foo.pl
real 0m2.241s
user 0m2.236s
sys 0m0.000s
$
$run\u 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;
$run\u 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;
unix时间是1970年,而不是1900年。在编写堆栈溢出问题时,请多加注意。如果代码的这一部分与问题无关,您可以使用注释,而不是提供不进行编译的代码来说明问题。如果您显示的输出实际上是您发布的程序正在生成的,这也很好。单次插入真的需要超过小数秒吗?是的,我们正在谈论数百万数据UNIX时间是1970年代,而不是1900年。在编写有关堆栈溢出的问题时,请多加小心。如果代码的这一部分与问题无关,您可以使用注释,而不是提供不进行编译的代码来说明问题。如果您显示的输出实际上是您发布的程序正在生成的,这也很好。单次插入真的需要超过小数秒吗?是的,我们谈论的是数百万数据/它不起作用:执行时间:0个时钟秒(0.00 usr+0.00 sys=0.00 CPU)@doudy_05如果您所做的只是设置一个
$sql
变量,而不是实际运行一个查询,那么会有意义我的脚本是运行一个查询,将新值插入一个表中,持续时间是1M07ST这是我得到的输出:代码耗时:0个时钟秒(0.00 usr+0.00 sys=0.00 CPU)@doudy您可能已经将第一个基准对象放在您想要计时的代码下面了。/它不起作用:执行时间:0 Wallcock秒(0.00 usr+0.00 sys=0.00 CPU)@doudy_05如果您所做的只是设置一个$sql
变量,而不是实际运行查询,我的脚本是运行一个查询,将新值插入到表中,持续时间是1M07ST这是我得到的输出:代码花费:0 wallclock secs(0.00 usr+0.00 sys=0.00 CPU)@doudy你可能已经将第一个基准对象放在了你想要计时的代码下面。但即使它不是时间戳,将其传递给gmtime是有意义的:use Time::Piece“gmtime”;比如说gmtime($run\u time)->strftime(“%H:%M:%S”)
(假设不到一天)@ysth,没错,不过使用内置的gmtime
并从POSIX抓取strftime
会更简单,也不那么神奇。我做了gmtime($run\u time)->strftime(%H:%M:%S),但我没有得到脚本的运行时间。我需要h:m:s@doudy_05,如果你有问题,作为问题。我不是在玩猜谜游戏。@doudy_05,哦,我以为你想使用ysth的代码(因为你(falsly)声称它不起作用)。但即使它不是时间戳,也可以将它传递给gmtime:use Time::Piece“gmtime”;比如说gmtime($run\u time)->strftime(“%H:%M:%S”)
(假设不到一天)@ysth,没错,不过使用内置的gmtime
并从POSIX抓取strftime
会更简单,也不那么神奇。我做了gmtime($run\u time)->strftime(%H:%M:%S),但我没有得到脚本的运行时间。我需要h:m:s@doudy_05,如果你有问题,作为问题。我不是在玩猜谜游戏。@doudy_05,哦,我以为你想使用ysth的代码(因为你(falsly)声称它不起作用)。