我需要生成一个随机日期。 我的计算时间不需要时间。 我想要使用的是:
def date_rand from = 0.0, to = Time.now
Time.at(from + rand * (to.to_f - from.to_f))
end
这让我很接近,但还有其他一些我不需要的信息。 (时间,区域等) 如果有办法在没有所有其他数据的情况下获取日期,我将非常感谢您对此有所帮助。
答案 0 :(得分:6)
在Ruby 1.9中,包括date
库在#to_date
类中添加Time
方法(以及#to_datetime
方法)。 Ruby 1.8也有它,但它是一种私有方法。
require 'date'
def date_rand(from = 0.0, to = Time.now)
Time.at(from + rand * (to.to_f - from.to_f)).to_date
end
在Ruby 1.8中,你可以这样做:
def date_rand(from = 0.0, to = Time.now)
time = Time.at(from + rand * (to.to_f - from.to_f))
Date.civil(time.year, time.month, time.day)
end
答案 1 :(得分:2)
require 'date'
def date_rand(from = Date.new(1970,1,1), to = Date.today)
low, high = from.ajd.to_i, to.ajd.to_i
r = rand(high-low+1) + low
Date.jd(r)
end
答案 2 :(得分:1)
来自Obie Fernandez的blog post。
class Time
def self.random(years_back=5)
year = Time.now.year - rand(years_back) - 1
month = rand(12) + 1
day = rand(31) + 1
Time.local(year, month, day)
end
end
这允许您调用Time.random。我将此作为您问题的替代答案,并且取决于您计划如何使用它,请小心,因为猴子修补标准的lib类通常不是最好的方法来处理事情,如果其他人要去这些天必须调试/支持你的代码。