【问题标题】:Converting hours, minutes and seconds to seconds in ruby在 ruby​​ 中将小时、分钟和秒转换为秒
【发布时间】:2015-01-16 10:44:40
【问题描述】:

我想知道如何在 ruby​​ 中安全地将 HH:MM:SS 转换为秒,因为输入只会在 HH:MM:SS(或 H:M:S)中,没有天数。

天必须已经以小时为单位 - “168:00:00”而不是“7 天,00:00:00”。

【问题讨论】:

    标签: ruby-on-rails ruby datetime time


    【解决方案1】:
    '12:34:56'.split(':').map(&:to_i).inject(0) { |a, b| a * 60 + b }
    => 45296
    

    【讨论】:

    • 如果你想包括毫秒(即解析"12:34:56.912")你可以将地图中的to_i更改为to_f
    【解决方案2】:
    h, m, s = "168:00:00".split(":").map(&:to_i)
    h %= 24
    (((h * 60) + m) * 60) + s
    

    【讨论】:

    • 不应该是(((h * 60) + m) * 60) + s吗?我认为你的小时和分钟都颠倒了。
    • @cdownard 哎呀,你完全正确。这是我的错。
    【解决方案3】:

    解决方法很简单:

    secs = 0
    => 0
    "12:34:56".split(":").reverse.each_with_index do |x,y|
      "#{secs} += (#{x.to_i})*(#{60**y})"
      secs += (x.to_i)*(60**y)
    end
    => ["56", "34", "12"]
    secs
    => 45296
    

    不使用TimeDateTime,也没有时区问题!

    干杯!

    【讨论】:

    • 不,我发帖是为了帮助和我有同样问题的其他人。
    • 博文怎么样?
    • 如果您的意思是博客文章,那么不,我没有时间写一篇文章。或者内容。或两者兼而有之。
    • 能否请您创建更多问题并回答自己?我猜这就是stackoverflow。最糟糕的解决方案,点赞@sawa
    • 很抱歉,我没有达到解决方案质量的社区标准。如果 SO 的目标是消除初学者级别的输入,那么我很抱歉。问题是 - 不应该限制仅向拥有学位和 3 个证书的人发布答案的能力吗?
    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多