【问题标题】:Ruby Date Time SubtractionRuby 日期时间减法
【发布时间】:2018-12-21 11:31:19
【问题描述】:

我正在尝试从某个日志文件结果中计算进程所花费的确切持续时间。解析日志后,我到达了以下阶段:

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

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

【问题讨论】:

    标签: ruby ruby-on-rails-3 time duration


    【解决方案1】:
    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)
    

    参见DateTime#strptimeDateTime#(后者用于格式指令)。只要知道日期和时间格式,我总是更喜欢strptime 而不是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)>`.
    

    【讨论】:

    • 这是一个纯 Ruby 解决方案。可能有 Rails 方法可以让工作更轻松,但不知道 Rails 我不能说。
    • 哇。这个例子。我从来不知道DateTime#parse 会这么疯狂。
    • 感谢您的回答。这正是我想要的!
    【解决方案2】:

    您可以将日期和时间字段连接起来并使用Time.parse将其转换为时间对象,然后计算秒数的差异

    Time.parse('2018-07-12 12:59:55,397').to_i - Time.parse('2018-07-12 12:59:53,913').to_i
    

    希望对你有帮助

    【讨论】:

    • 结束时间减去开始时间会得到肯定的结果。
    • 感谢您的回答。是的,我同意 concat 然后减法也是个好主意。谢谢
    猜你喜欢
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多