我想检查当前时间是否在上午10点到晚上10点之间。我该怎么办?
答案 0 :(得分:5)
您可以定义Range
并检查包含。
(10..22).include?(Time.new.hour)
# => true
您的代码将是
if (10..22).include?(Time.new.hour)
# do whatever you want
end
答案 1 :(得分:4)
尝试类似:
time = Time.new
if time.hour >= 10 && time.hour < 22
// Your code
end
更多信息:http://www.tutorialspoint.com/ruby/ruby_date_time.htm
我从来没有使用过Ruby语言,但是如果你只是google它,那么你的第一个结果中的一个将是如何获得当前时间。
答案 2 :(得分:1)
为什么不使用between?
?
d1 = Time.new(2011,11,18,10)
d2 = Time.new(2011,11,18,22)
[
Time.new(2011,11,18,9),
Time.new(2011,11,18,12),
Time.new(2011,11,18,23),
].each{|d|
p d.between?(d1,d2)
}
结果
false
true
false
作为替代方案,您必须根据您的测试时间创建自己的时间:
[
Time.new(2011,11,18,9),
Time.new(2011,11,18,12),
Time.new(2011,11,18,23),
].each{|d|
d1 = Time.new(d.year,d.month,d.day,10)
d2 = Time.new(d.year,d.month,d.day,22)
p d.between?(d1,d2)
}
基于此,您可以扩展Time
:
class Time
def between_hours?( h1, h2)
d1 = Time.new(year,month,day,h1)
d2 = Time.new(year,month,day,h2)
self.between?(d1,d2)
end
end
[
Time.new(2011,11,18,9),
Time.new(2011,11,18,12),
Time.new(2011,11,18,23),
].each{|d|
p d.between_hours?(10,22)
}
答案 3 :(得分:0)
只需添加以供将来参考:(JRuby 1.6.7,ruby 1.9.2-p132)
require 'time'
require 'benchmark'
s= Time.parse("2012-04-12 11:00")
m= Time.parse("2012-04-12 11:30")
e= Time.parse("2012-04-12 12:00")
Benchmark.bm do |bm|
bm.report { 10_000.times{ (s..e).include?(m) } } # slow!
bm.report { 1_000_000.times{ (s..e).cover?(m) } }
bm.report { 1_000_000.times{ m.between?(s, e) } }
end
收益率(amd64 x4 core archlinux)
user system total real 2.390000 0.000000 2.390000 ( 2.389000) 0.342000 0.000000 0.342000 ( 0.342000) 0.153000 0.000000 0.153000 ( 0.154000)