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

Ruby:如何从CSV文件计算给定2个日期时间的持续时间?,ruby,datetime,time,csv,duration,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 不确定它是否是“最佳”,但您可以使用DateTime类进行此操作: require 'date' d1 = DateTime.parse("Mon Jul

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

start time: Mon Jul 20 18:25:17 -0400 2009
end time: Mon Jul 20 18:49:43 -0400 2009
不确定它是否是“最佳”,但您可以使用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"
不确定它是否是“最佳”,但您可以使用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"

您可以通过从一个日期时间减去另一个日期时间来获得持续时间。只要包含:date\u time转换器,您就可以从FasterCSV获得DateTime对象。例如:

FasterCSV.foreach(some_file, :converters => [:date_time]) do |row|
    #blah
end
或者,您可以使用DateTime#parse自己转换它们

从那里,您可以使用获取一个数组,其中包含
[小时、分钟、秒、秒的分数]
,我认为这比一天的分数更容易处理


根据您希望如何显示它们,可能会有一些信息对您有所帮助。这些答案是针对Rails的,但是您可以始终包含Rails中必要的部分,或者只查看函数的源代码(在Rails文档中提供)来了解它们是如何实现的。这是不言自明的。

你可以通过从一个日期时间减去另一个日期时间得到持续时间。只要包含:date\u time转换器,您就可以从FasterCSV获得DateTime对象。例如:

FasterCSV.foreach(some_file, :converters => [:date_time]) do |row|
    #blah
end
或者,您可以使用DateTime#parse自己转换它们

从那里,您可以使用获取一个数组,其中包含
[小时、分钟、秒、秒的分数]
,我认为这比一天的分数更容易处理


根据您希望如何显示它们,可能会有一些信息对您有所帮助。这些答案是针对Rails的,但是您可以始终包含Rails中必要的部分,或者只查看函数的源代码(在Rails文档中提供)来了解它们是如何实现的。这一点不言自明。

虽然DateTime类还可以,但还有“
time.rb
”扩展了标准时间类。它不处理模糊性,也不支持不同的日历,因此它更轻。语法是相同的(
Time.parse()
)附录:t2-t1返回以秒为单位的间隔。我只是倾向于使用DateTime,因为它看起来比Time更聪明,这是我选择Ruby和其他语言时最大的一点。虽然DateTime类还可以,但还有“
Time.rb
”扩展了标准Time类。它不处理模糊性,也不支持不同的日历,因此它更轻。语法是相同的(
Time.parse()
)附录:t2-t1返回以秒为单位的间隔。我只是倾向于使用DateTime,因为它看起来比时间更聪明,这是我选择Ruby而不是其他语言时最大的一点。