确定自上次时间戳以来经过的时间

时间:2017-08-18 13:01:27

标签: perl

我想在文件中写入时间戳,然后能够确定当前时间是否为<距离该时间戳1分钟 使用:

open my $fh, '>', '~/.time_from_run';  
my $timestamp = localtime(time);    
print $fh $timestamp;  
close $fh;  

打印出一个字符串。最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

最简单的方法是编写time()而不是localtime()的输出(顺便提一句,localtime(time)毫无意义 - 如果省略localtime()的参数,它将使用time()作为默认值)。这将为您提供自1970年初以来的秒数(这是一个非常大的数字 - 目前为1503061737)。然后,您可以读回该号码,并将其与time()的当前值进行比较。

这种方法的(轻微)缺点是你从time()得到的数字不容易被人类理解。如果您想要阅读并理解.time_from_run中的值,那么您可以妥协并以易于理解的格式编写时间戳(ISO-8601是显而易见的选择。

use Time::Piece;

open my $fh, '>', '~/.time_from_run' or die $!;

print $fh localtime->datatime;

然后你可以这样阅读和比较你的时间:

use Time::Piece;
use Time::Seconds;

open my $fh, '<', '~/.time_from_run' or die !$;

chomp(my $then_str) = <$fh>;

my $then = Time::Piece->strptime('%Y%m%dT%H:%M:%S', $then_str);

if (localtime - $then < ONE_MINUTE) {
  print "Elapsed time is less than a minute\n";
}