【问题标题】:Determine time elapsed since last timestamp确定自上次时间戳以来经过的时间
【发布时间】:2017-08-18 21:15:52
【问题描述】:

我想向文件写入时间戳,然后能够确定当前时间是否距离该时间戳 使用:

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

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

【问题讨论】:

  • 为什么不把time 写入文件?
  • 只使用time,而不是localtime,将这两个数字相减除以60得到分钟。

标签: perl


【解决方案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";
}

【讨论】:

  • time 给出了一个时代,对吗?所以我可以使用命令行来找出它是对的吗?
  • 当然。 date -d @1503061737Fri 18 Aug 14:08:57 BST 2017
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2018-11-05
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多