Ruby:如何从CSV文件中计算给定2个日期时间的持续时间?

时间:2009-07-23 18:30:45

标签: ruby datetime time csv duration

我有许多包含开始和结束时间的CSV文件。我可以使用FasterCSV来解析文件,但我不知道在Ruby中获取持续时间的最佳方法。以下是为CSV文件的每一行生成的哈希值。

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

2 个答案:

答案 0 :(得分: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 :(得分: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]的数组,我认为这个数组比一天中的一小部分更容易使用。

根据您希望如何显示它们,可能会在answers of this question中提供有助于您的信息。这些答案适用于Rails,但您可以随时包含Rails中的必要部分,或者只查看函数的来源(可在Rails文档中找到)以了解它们是如何做到的。这是相当不言自明的。