2009-07-23 7 views
1

開始時刻と終了時刻を含む多数のCSVファイルがあります。私はファイルを解析するためにFasterCSVを使うことができますが、私はRubyで持続時間を取得する最良の方法を知らない。ここでは、CSVファイルの各行に対して生成されたハッシュの値を示します。Ruby:CSVファイルから2 datetimes与えられた期間を計算するにはどうすればいいですか?

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

答えて

2

別の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]を含む配列を得ることができます。これは、今日の分数よりも扱いが簡単です。

表示方法によっては、answers of this questionに役立つ情報があります。これらの答えはRailsのためのものですが、Railsから必要な部分を含めることも、関数のソース(Railsのドキュメントから入手できます)を見て、それらの動作を確認することもできます。それはかなり自明です。

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" 
+1

DateTimeクラスはOKですが、標準Timeクラスを拡張するtime.rbもあります。それはあいまいさを処理せず、異なるカレンダーをサポートしないので、はるかに軽いです。構文は同じです( 'Time.parse()') – hhaamu

+0

補遺:t2 - t1は間隔を秒単位で返します。 – hhaamu

+0

おそらく。私はDateTimeを使う傾向があります。なぜなら、Timeよりももっと賢いように見えますし、Rubyと他のいくつかの言語を選択すると、それは私の最大のポイントです。 –

関連する問題