我正在研究業務分析應用程序,我需要在特定月份的每小時基礎上獲取一些數據。例如我想要從2012年6月1日到2012年6月30日的數據,我需要獲取這些日子之間每小時的數據。 贊12:00 13:00,13:00-14:00 ....等。ruby隨着時間的迭代
我該怎麼做。請讓我知道。使用1.8.7平臺。
我正在研究業務分析應用程序,我需要在特定月份的每小時基礎上獲取一些數據。例如我想要從2012年6月1日到2012年6月30日的數據,我需要獲取這些日子之間每小時的數據。 贊12:00 13:00,13:00-14:00 ....等。ruby隨着時間的迭代
我該怎麼做。請讓我知道。使用1.8.7平臺。
如果您使用Rails有一個日期的方法step
:http://corelib.rubyonrails.org/classes/Date.html#M001273
在純Ruby只寫簡單的循環:
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
我認爲已經有一個答案here。
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
是的,一切都很好!
a = Time.now
b = Time.now + 3600*8
(a..b).step(3600){|t| puts t}