Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中计算localtime并将其转换为unix时间戳_Perl - Fatal编程技术网

如何在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)声称它不起作用)。