デルタを使用して Ruby Time オブジェクトを反復処理する
概要
Rubyで時間範囲を反復処理し、デルタを設定する方法はありますか?
私がやりたいことのアイデアは次のとおりです。
for hour in (start_time..end_time, hour)
hour #=> Time object set to hour
end
Time オブジェクトを反復処理できますが、2 つの間では 1 秒ごとに返されます。本当に必要なのは、オフセットまたはデルタ (分、時間など) を設定する方法です。
これは Ruby に組み込まれているのでしょうか、それとも利用可能な適切なプラグインはありますか?
解決策
1.9 より前では、Range#step を使用できました。
(start_time..end_time).step(3600) do |hour|
# ...
end
ただし、この戦略は Time#succ を 3600 回呼び出すことになるため、非常に時間がかかります。その代わり、 dolzenko が回答で指摘したように、より効率的な解決策は、単純なループを使用することです。
hour = start_time
while hour < end_time
# ...
hour += 3600
end
Rails を使用している場合は、3600 を 1.hour に置き換えることができ、これにより大幅に読みやすくなります。