在rails中转换总秒数

时间:2017-04-12 10:16:42

标签: ruby-on-rails ruby ruby-on-rails-4.2

我的总秒数为125557

当我尝试使用

将秒转换为“H:M:S”时
Time.at(125557).utc.strftime("%H:%M:%S")

它与10:52:37

类似

但我想要34:52:37(在10:52:37添加一天)

5 个答案:

答案 0 :(得分:6)

好吧,鉴于34:52:37不是一个有效的时间字符串,为此使用时间解析/转换库是没有意义的。最好手动计算。 divmod是您最好的朋友。看看:

secs = 125557
secs_in_an_hour = 3600

hours, secs = secs.divmod(secs_in_an_hour)
hours # => 34
secs # => 3157 # This now contains only minutes and seconds, no full hours

将此演变为完整的解决方案应该非常容易。

答案 1 :(得分:2)

试试这个

total_seconds = 125557

seconds = total_seconds % 60
minutes = (total_seconds / 60) % 60
hours = total_seconds / (60 * 60)

format("%02d:%02d:%02d", hours, minutes, seconds)

答案 2 :(得分:0)

如果您想更轻松地处理数周,日,小时,分钟和秒钟,可以尝试使用ruby-duration gem

d = Duration.new(125557)
=> #<Duration:0x007f84180758e8 @days=1, @hours=10, @minutes=52, @negative=false, @seconds=37, @total=125557, @weeks=0>
d.total_hours
=> 34
d.total_minutes
=> 2092

答案 3 :(得分:0)

我在这里https://stackoverflow.com/a/62562658/2970582发布了答案 ActiveSupport::Duration + inspect为您提供有效的结果

答案 4 :(得分:0)

Rails 6.1.0 起,您可以执行以下操作:

1.day.in_hours # => 24.0
3600.seconds.in_hours # => 1.0

文档:https://api.rubyonrails.org/classes/ActiveSupport/Duration.html#method-i-in_hours