2017-08-18 18 views
0

ファイルにタイムスタンプを書き込んで、現在の時刻がそのタイムスタンプから1分であるかどうかを確認することができます。
使用:最後のタイムスタンプからの経過時間を確認する

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

は、文字列を出力します。これのための最良の方法は何ですか?

+0

なぜファイルにちょうど 'time'を書き込みませ –

+0

わずか数分を取得するために60で二つの数と除算を減算、' time'、ない 'localtime'を使用 – choroba

答えて

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"; 
} 
+0

' time'はエポックを与えます?。コマンドラインを使って正しいものを見つけ出すことができますか? – Jim

+0

確かに 'date -d @ 1503061737'は' Fri 18 A ug 14:08:57 BST 2017' –

+0

関連:https://stackoverflow.com/questions/45757088/how-to-check-if-immediate-previous-run-failed-or-not – JRFerguson

関連する問題