0

YYYYMMDDHHで完全に解析可能な形式の 2 つのタイムスタンプが与えられますDateTime.strptime

私が作成したいのは、最初の日付から 2 番目の日付まで、1 時間単位で上記の指定された形式の文字列のリストです。

入力例:20130115152013011822.

期待される出力:['2013011515','2013011516','2013011517','2013011518', ... , '2013011820', '2013011820', '2013011821', '2013011822']

このタスクを達成するための ruby​​ ライブラリまたはコア機能はありますか?

4

2 に答える 2

2

stepRuby 1.9 を使用している場合は、1 時間ごとの解像度で使用できます。

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 に答える