Ruby 红宝石日期时间减法

Ruby 红宝石日期时间减法,ruby,ruby-on-rails-3,time,duration,Ruby,Ruby On Rails 3,Time,Duration,我正试图从一些日志文件结果中计算一个进程的确切持续时间。解析日志后,我在以下阶段进行了分析: my_array = ["Some_xyz_process", "Start", "2018-07-12", "12:59:53,397", "End", "2018-07-12", "12:59:55,913"] 如何从结束日期和时间中减去开始日期和时间,以获取流程所用的确切持续时间 您可以对日期和时间字段进行压缩,并使用time.parse将其转换为时间对象,然后计算秒数差异 Time.parse

我正试图从一些日志文件结果中计算一个进程的确切持续时间。解析日志后,我在以下阶段进行了分析:

my_array = ["Some_xyz_process", "Start", "2018-07-12", "12:59:53,397", "End", "2018-07-12", "12:59:55,913"]

如何从结束日期和时间中减去开始日期和时间,以获取流程所用的确切持续时间

您可以对日期和时间字段进行压缩,并使用
time.parse
将其转换为时间对象,然后计算秒数差异

Time.parse('2018-07-12 12:59:55,397').to_i - Time.parse('2018-07-12 12:59:53,913').to_i
希望这有帮助

my_array = ["Some_xyz_process",
            "Start", "2018-07-12", "12:59:53,397",
            "End", "2018-07-12", "12:59:55,913"]

require 'date'

fmt = '%Y-%m-%d%H:%M:%S,%L'
is = my_array.index('Start')
  #=> 1
ie = my_array.index('End') 
  #=> 4
DateTime.strptime(my_array[ie+1] + my_array[ie+2], fmt).to_time -
DateTime.strptime(my_array[is+1] + my_array[is+2], fmt).to_time
  #=> 2.516 (seconds)
请参阅和(后者了解格式指令)。只要知道日期和时间格式,我总是喜欢
strtime
而不是
parse
。以下是一个原因示例:

DateTime.parse 'Theresa May has had a bad week over Brexit'
  #=> #<DateTime: 2018-05-01T00:00:00+00:00 ((2458240j,0s,0n),+0s,2299161j)>`.
DateTime.parse“特里萨·梅在脱欧问题上度过了糟糕的一周”
#=> #`.

从结束时间减去开始时间将得到积极的结果。谢谢您的回答。是的,我同意concat和substract也是个好主意。感谢这是一个纯Ruby解决方案。也许有一些Rails方法可以让工作更容易,但是不知道Rails我不能这么说。哇。这个例子。我从来不知道
DateTime#parse
会这么疯狂。谢谢你的回答。这正是我要找的!