1

開始時刻と終了時刻を含むCSVファイルがいくつかあります。FasterCSVを使用してファイルを解析できますが、Rubyで期間を取得するための最良の方法がわかりません。CSVファイルの各行に対して生成されたハッシュの値は次のとおりです。

start time: Mon Jul 20 18:25:17 -0400 2009
end time: Mon Jul 20 18:49:43 -0400 2009
4

2 に答える 2

3

それが「最良」であるかどうかはわかりませんが、たとえばDateTimeクラスを使用できます。

require 'date'

d1 = DateTime.parse("Mon Jul 20 18:25:17 -0400 2009")
d2 = DateTime.parse("Mon Jul 21 18:25:17 -0400 2009")

puts "Duration is #{(d2-d1).to_f} days"
于 2009-07-23T18:45:41.177 に答える
2

あるDateTimeを別のDateTimeから引くことにより、期間を取得できます。:date_timeコンバーターを含める限り、FasterCSVからDateTimeオブジェクトを取得します。例えば:

FasterCSV.foreach(some_file, :converters => [:date_time]) do |row|
    #blah
end

または、DateTime#parseを使用して自分で変換することもできます。

そこから、Date#day_fraction_to_timeを使用して、を含む配列を取得できます[hours, minutes, seconds, fraction_of_a_second]。これは、1日の端数よりも操作が簡単だと思います。

それらをどのように表示したいかにもよりますが、おそらくこの質問の答えに役立つ情報があります。これらの回答はRailsに関するものですが、Railsの必要な部分をいつでも含めることができます。または、関数のソース(Railsのドキュメントで入手可能)を調べて、それらがどのように機能するかを確認することもできます。それはかなり自明です。

于 2009-07-23T19:07:19.683 に答える