0

给出了格式中的两个时间戳YYYYMMDDHH,它们完全可以被DateTime.strptime.

我想要创建的是从第一个日期到第二个日期,在一小时内从上面给定格式的字符串列表。

示例输入:20130115152013011822

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

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

4

2 回答 2

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
于 2013-01-14T09:05:02.097 回答
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
于 2013-01-14T09:04:34.610 回答