Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在两个给定日期之间以小时为单位生成日期对象_Ruby - Fatal编程技术网

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可用。感谢这个优雅的解决方案。合适的解决方案,但公认的解决方案更优雅。谢谢!是的,我忘记了在日期/时间中添加分数:)…如果你对闰秒或奇怪的时区感兴趣,这个解决方案可能比公认的解决方案更合适