Ruby 在两个给定日期之间以小时为单位生成日期对象
给出了两个时间戳,格式为Ruby 在两个给定日期之间以小时为单位生成日期对象,ruby,Ruby,给出了两个时间戳,格式为YYYYMMDDHH,完全可以通过DateTime.strtime解析 我要创建的是一个给定格式的字符串列表,从第一个日期到第二个日期,从上面开始,以一小时为一步 输入示例:2013011155和2013011822 预期产出:['20130111515'、'20130111516'、'20130111517'、'20130111518'、…、'20130111820'、'20130111820'、'20130111821'、'20130111822'] 是否有任何rub
YYYYMMDDHH
,完全可以通过DateTime.strtime
解析
我要创建的是一个给定格式的字符串列表,从第一个日期到第二个日期,从上面开始,以一小时为一步
输入示例:2013011155
和2013011822
预期产出:['20130111515'、'20130111516'、'20130111517'、'20130111518'、…、'20130111820'、'20130111820'、'20130111821'、'20130111822']
是否有任何ruby库或核心功能来完成此任务?#/usr/bin/env ruby
#!/usr/bin/env ruby
dt_from = "2013011515"
dt_to = "2013011822"
require 'date'
date_from = Date.parse(dt_from[0,8])
date_to = Date.parse(dt_to[0,8])
res = []
date = date_from
while (date <= date_to)
if date == date_from
hours = (dt_from[8,2].to_i..23).to_a
elsif date == date_to
hours = (0..dt_to[8,2].to_i).to_a
else
hours = (0..23).to_a
end
hours.each {|h| res << "#{date.strftime('%Y%m%d')}#{"%02d" % h}"}
date += 1
end
puts res.inspect
dt_from=“20130111515”
dt_to=“201301182”
需要“日期”
date\u from=date.parse(dt\u from[0,8])
date_to=date.parse(dt_to[0,8])
res=[]
日期=开始日期
while(date如果使用ruby 1.9,则可以使用每小时一次的分辨率:
date1 = DateTime.strptime('2013011522', '%Y%m%d%H')
date2 = DateTime.strptime('2013011622', '%Y%m%d%H')
date_range = date1.step(date2, 1.0/24).to_a
或者,在ruby 1.8.7上,使用循环
date1 = DateTime.strptime('2013011522', '%Y%m%d%H')
date2 = DateTime.strptime('2013011622', '%Y%m%d%H')
new_date = date1
date_range = [date1]
date_range << (new_date += 1.0/24) while new_date <= date2
date1=DateTime.strtime('201301152','%Y%m%d%H')
date2=DateTime.strTime('2013011622','%Y%m%d%H')
新日期=日期1
日期\范围=[date1]
date_range Ruby 1.9可用。感谢这个优雅的解决方案。合适的解决方案,但公认的解决方案更优雅。谢谢!是的,我忘记了在日期/时间中添加分数:)…如果你对闰秒或奇怪的时区感兴趣,这个解决方案可能比公认的解决方案更合适