在两个给定日期之间以小时为单位生成日期对象

时间:2013-01-14 08:32:27

标签: ruby

给出了YYYYMMDDHH格式的两个时间戳,DateTime.strptime完全可以解析。

我想创建的是一个小时步骤中给定格式的字符串列表,从第一个日期到第二个日期开始。

示例输入:20130115152013011822

预期输出:['2013011515','2013011516','2013011517','2013011518', ... , '2013011820', '2013011820', '2013011821', '2013011822']

是否有任何ruby库或核心功能来完成此任务?

2 个答案:

答案 0 :(得分:2)

如果您使用ruby 1.9:

,则可以使用小时分辨率step
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

答案 1 :(得分:0)

#!/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
相关问题