いつもお世話になります。
現在、cronを使用して一定時間Aという処理がない場合にBという処理を行いたいと思っております。
具体的には処理Aが行われるたびに、そのときの日付・時間をtxtファイルに保存しておき、cronでrbファイルを定期的に実行します。rbファイルではそのtextを読み込み、現在の時間と比較し、例えば24時間以上経っていたらb処理を実行というような流れを考えております。
そこで質問なのですが、24時間以上経ったということを比較したい場合どのようにすればよいのでしょうか。日付・時間をtxtファイルに保存する場合String型となってしまうため、例えば"20170805125023"と"20170806114055"をint型に型変換し引き算というような形を取るという発想しか出ず……。
テキストに保存して比較を行うということが正しいかどうかも含め、うまいやり方ををご教示いただければ幸いです。
よろしくお願いいたします。
Ruby
1require 'date' 2require 'active_support/all' 3 4p DateTime.now.strftime('%Y%m%d%H%M%S') 5=> "20170805125023" 6 7# このような形でテキストに保存するのが間違い? 8
Ruby
1 2open(File.expand_path("/home/rails/sample/lasttime.txt"),"w"){|f| f.write DateTime.now.strftime("%F %T") } 3# ↑で一度lasttime.txtに書き込み後下のrbファイルを実行 4 5# regularly.rb 6 7require 'date' 8require 'active_support/all' 9 10p DateTime.now.strftime('%F %T') 11p DateTime.parse(open(File.expand_path("/home/rails/sample/lasttime.txt"),&:read)) 12p DateTime.now - DateTime.parse(open(File.expand_path("/home/rails/sample/lasttime.txt"),&:read)) 13p DateTime.parse(open(File.expand_path("/home/rails/sample/lasttime.txt"),&:read)) - DateTime.now 14 15 16if DateTime.now - DateTime.parse(open(File.expand_path("/home/rails/sample/lasttime.txt"),&:read)) >= 1/1440r 17p "1分以上経った" 18 19else 20 21p "1分以上経ってない" 22 23end 24 25 26 27# 実行結果 28"2017-09-06 14:55:58" 29Wed, 06 Sep 2017 13:48:17 +0000 30(-28338402251309/86400000000000) 31(2833840202837/8640000000000) 32"1分以上経ってない" 33 34計算値が常に0.33付近になってしまう。 35またotn様にご教示いただいた計算順序だとマイナスがついてしまう。 36 37
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/06 05:03
2017/09/06 05:39
2017/09/06 08:59