ランダムなタイムスロットを取得するには、2つの時間の間の距離を計算する必要があります。その距離スパンでランダムな値を取得します。そして最後にそれをあなたの時間から追加します。
のようなもの:(しかし、私はそれをテストするつもりはありません)
def time_between(from, to)
if from > to
time_between(to, from)
else
from + rand(to - from)
end
end
時間のDSLを作成することに関して。Railsがどのようにそれを行うかを見ることができます。しかし、あなたが望んでいるもののようなものを手に入れるために。1日の時間を表すクラスを作成するだけです。Fixnumのamまたはpm呼び出しでインスタンス化します。次に、of_today
(およびその他の必要な)メソッドを記述します。
class Fixnum
def am
TimeWriter.new(self)
end
def pm
TimeWriter.new(self + 12)
end
end
class TimeWriter
MINUTES_IN_HOUR = 60
SECONDS_IN_MINUTE = 60
SECONDS_IN_HOUR = MINUTES_IN_HOUR * SECONDS_IN_MINUTE
def initialize hours
@hours = hours
end
def of_today
start_of_today + (hours * SECONDS_IN_HOUR)
end
private
attr_reader :hours
def start_of_today
now = Time.now
Time.new(now.year, now.month, now.day, 0, 0)
end
end
24時間以上のエラー処理を追加する必要があります。