我正在寻找一种有效的方法,在 Ruby 1.9.x/Rails 3.2.x 中,以一个小时的步长在两个 DateTime 对象之间进行迭代。
('2013-01-01'.to_datetime .. '2013-02-01'.to_datetime).step(1.hour) do |date|
...
end
我知道这个问题是 1.hour
只是秒数,但我尝试将其转换为 DateTime 对象并将其用作步骤也不起作用.
我查看了“Beware of Ruby Sugar”。它在底部附近提到 DateTime 有一个直接的 step
方法。我通过在 DateTime 对象上运行 methods
来确认这一点,但是我在 DateTime 中找不到任何关于 step
的文档,无论是在 Ruby 还是 Rails 的文档中。
最佳答案
与我在“How do I return an array of days and hours from a range?”中的回答类似,诀窍是使用 to_i
处理纪元以来的秒数:
('2013-01-01'.to_datetime.to_i .. '2013-02-01'.to_datetime.to_i).step(1.hour) do |date|
puts Time.at(date)
end
请注意,Time.at()
使用您本地的时区进行转换,因此您可能希望使用 Time.at(date).utc
指定 UTC。 p>
关于ruby-on-rails - 在两个日期时间之间迭代,步长为一小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14555205/