2016-08-12 4 views
1

私の目標は、dteが現在の時刻から1時間以内であればループを止めることです。これを行うための "ルビーの道"はありますか?DateTimeが現在の時刻から1時間以内かどうかを確認

#THIS IS AN INFINITE LOOP, DONT RUN THIS 
dte=DateTime.strptime("2000-01-01 21:00:00", '%Y-%m-%d %H:%M:%S') 
while(dte<(DateTime.now.to_time-1).to_datetime) 
    #increments dte by one hour, not shown here 
end 

答えて

0

本当にDateTimeを使用する必要がある場合は、正しい方法で処理します。

Subtract n hours from a DateTime in Ruby

また、行うことができます。

require 'time' 
time = Time.parse('2000-01-01 21:00:00') 
while time < Time.now - 3600 do 
    ... 
end 

あなたはactive_supportコアの拡張機能を使用して、より効率的にすることができます。 (レールのactive_support含まず)

require 'active_support/core_ext/numeric/time'  
while time < Time.now - 1.hour do 
    ... 
end 

さらに良い

while time < 1.hour.ago do 
    ... 
end 
3

ピュアRubyの道:あなたはちょうどその日の分画を取る必要がある

  • 1.0

    one_hour_ago_time = (DateTime.now - (1.0/24)) 
    
      =一日
    • 1.0/24 = 1時間
    • 1.0 /(* 60 24)= 1分
    • 1.0 /(24 * 60 * 60)= 1秒
  • 0

    また、これを試すことができます。

    current_time = DateTime.now.strftime("%Y-%m-%d %H:%M:%S") 
    
    last_time = (DateTime.now - (1.0/24)).strftime("%Y-%m-%d %H:%M:%S") 
    
    last_time.upto(current_time) {|date| puts date } 
    
    +0

    'hour'方法をrubyではサポートされていません。 'Rails'メソッドです。 –

    +0

    ' require 'active_support'' bcsを使用してください。これにより、1時間のための未定義のメソッド時間が生成されます:Fixnum' –

    +0

    1.hourの代わりに(1.0/24)を使用します。わたしにはできる – bipin52165

    関連する問題