Сравнение времени в рубине - PullRequest
2 голосов
/ 18 ноября 2011

Я хочу проверить, находится ли текущее время между 10:00 и 22:00.Как я могу сделать чек?

Ответы [ 4 ]

5 голосов
/ 18 ноября 2011

Можно определить Range и проверить на включение.

(10..22).include?(Time.new.hour)
# => true

Ваш код будет

if (10..22).include?(Time.new.hour)
  # do whatever you want
end
4 голосов
/ 18 ноября 2011

Попробуйте что-то вроде:

time = Time.new
if time.hour >= 10 && time.hour < 22
    // Your code
end

Дополнительная информация: http://www.tutorialspoint.com/ruby/ruby_date_time.htm

Я никогда не использовал язык Ruby, но если вы просто Google, он будет в 1 из ваших первыхрезультаты как узнать текущий час.

1 голос
/ 19 ноября 2011

Почему бы не использовать 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)
}
0 голосов
/ 12 апреля 2012

Просто добавьте это для дальнейшего использования: (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...