0

我正在开发业务分析应用程序,我需要在特定月份的每小时基础上获取一些数据。例如,我想获取从 2012 年 6 月 1 日到 2012 年 6 月 30 日的数据,我需要获取这几天之间每小时的数据。比如 12:00 13:00,13:00-14:00 ....等。

我该怎么做。请告诉我。使用1.8.7平台。

4

4 回答 4

3
start = Date.new(2012, 6, 1).to_time.to_i
stop  = Date.new(2012, 6, 30).to_time.to_i

(start..stop).step(1.hour).each do |timestamp| 
  puts Time.at(timestamp)
end
于 2012-07-10T09:58:33.497 回答
3

如果您使用的是 Rails,则有一个 Date 方法stephttp ://corelib.rubyonrails.org/classes/Date.html#M001273


在纯红宝石上只需编写简单的循环:

t=Time.new(2012,01,01,0,0,0) #start time
max_time=Time.new(2012,01,31,23,59,59) #end time
step=60*60 #1hour
while t<=max_time
     p t #your code here
     t += step
end

为了简化使用这个 ruby​​ 扩展:

module TimeStep

  def step(limit, step)  # :yield: time
    t = self
    op = [:-,:<=,:>=][step<=>0]
    while t.__send__(op, limit)
       yield t
       t += step
    end
    self
  end
end

Time.send(:include, TimeStep) #include the extension

用法:

t=Time.new(2012,01,01,0,0,0)
t.step(Time.new(2012,01,31,23,59,59),3600) do |time|
  puts time
end

您还可以向下迭代:

t=Time.new(2012,01,31)
t.step(Time.new(2012,01,1),-3600) do |time|
   puts time
end
于 2012-07-10T10:07:05.463 回答
2

我想这里已经有了答案

于 2012-07-10T09:57:44.090 回答
0

是的,步骤很好!

a = Time.now
b = Time.now + 3600*8
(a..b).step(3600){|t| puts t}
于 2012-07-10T09:58:50.267 回答