我有许多包含开始和结束时间的CSV文件。我可以使用FasterCSV来解析文件,但我不知道在Ruby中获取持续时间的最佳方法。以下是为CSV文件的每一行生成的哈希值。
start time: Mon Jul 20 18:25:17 -0400 2009
end time: Mon Jul 20 18:49:43 -0400 2009
答案 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文档中找到)以了解它们是如何做到的。这是相当不言自明的。