2012-04-10 8 views
10

के बीच समय की जांच करें मेरे पास एक कोड है जो गलती से इसे उत्पन्न करता है और मैं सोच रहा हूं कि समय की जांच करने के लिए एक बेहतर तरीका होना चाहिए> 9.30 बजे और समय < 4 बजे किसी भी विचार को अत्यधिक जटिल माना जाता है।9.30 से 4 रूबी

def checkTime 

    goodtime=false 
    if(Time.now.hour>9 and Time.now.min>30) then 

    if(Time.now.hour<16) then 
     goodtime=true 

    else 
     # do nothing 
    end 
    elsif Time.now.hour>9 and Time.now.hour<16 then 
    goodtime=true 

    else 
     # do nothing 
    end 
    return goodtime 

end 

उत्तर

6
t = Time.now 

Range.new(
    Time.local(t.year, t.month, t.day, 9), 
    Time.local(t.year, t.month, t.day, 16, 30) 
) === t 
+0

यह एक मेरे लिए सही काम किया। आपका बहुत बहुत धन्यवाद। – junkone

+1

मुझे 2.0.0 में काम करने के लिए यह नहीं मिल रहा है, क्योंकि यह रिपोर्ट करता है: 'टाइप एरर: टाइम से पुन: सक्रिय नहीं हो सकता है। '.to_i' के साथ रेंज एंडपॉइंट्स को कनवर्ट करना, और फिर' t.to_i' कार्यों के साथ तुलना करना। – tamouse

3

बस:

def checkTime 
    return ((Time.now.hour * 60) + Time.now.min) >= 570 && ((Time.now.hour * 60) + Time.now.min) < 960 
end 
+0

मैं की जरूरत है यदि घंटा <10 है तो मिनट 30 से भी अधिक हो सकता है। घंटे और मिनट की तुलना 1 ऑब्जेक्ट – junkone

+0

के रूप में करने का एक तरीका है मुझे 'NoMethodError: 2012-04-10 18:19:18 +0200 के लिए अपरिभाषित विधि \ 'मिनट' मिलती है: समय' –

+0

((Time.now.hour) के बारे में क्या * 60) + Time.now.min)? – DanS

5
def check_time(t=Time.now) 
    early = Time.new(t.year, t.month, t.day, 9, 30, 0, t.utc_offset) 
    late = Time.new(t.year, t.month, t.day, 16, 0, 0, t.utc_offset) 
    t.between?(early, late) 
end 
+0

आपके उत्तर के लिए धन्यवाद। मेरे पास ArgumentError जैसे कुछ मुद्दे थे: तर्कों की गलत संख्या (0 के लिए 7) से (irb): 7: 'प्रारंभ करें' से (irb): 7: 'नया' से (irb): 7 – junkone

3

एक मिश्रित संस्करण वातावरण में काम कर रहे हैं और इस सटीक तरीका यहाँ की आवश्यकता होगी, क्या मैं अपने कोड में डाल दिया गया है:

if RUBY_VERSION == "1.9.3" 
    def check_time(starthour,endhour,t=Time.now) 
    early = Time.new(t.year, t.month, t.day, starthour, 0, 0) 
    late = Time.new(t.year, t.month, t.day, endhour, 0, 0) 
    t.between?(early, late) 
    end 
elsif RUBY_VERSION == "1.8.7" 
    def check_time(starthour,endhour,t=Time.now) 
    early = Time.local(t.year, t.month, t.day, starthour, 0, 0) 
    late = Time.local(t.year, t.month, t.day, endhour, 0, 0) 
    t.between?(early, late) 
    end 
end