【发布时间】:2017-09-08 01:36:33
【问题描述】:
我的总秒数是125557
当我尝试使用
将秒数转换为“H:M:S”时Time.at(125557).utc.strftime("%H:%M:%S")
它给了10:52:37
但我实际上想要34:52:37(在 10:52:37 中增加一天)
【问题讨论】:
标签: 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 中增加一天)
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4.2
好吧,鉴于34:52:37 不是有效的时间字符串,为此使用时间解析/转换库毫无意义。最好手动计算。 div 和 mod 是你这里最好的朋友。看看:
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
将其演变为完整的工作解决方案应该很容易。
【讨论】:
试试这个
total_seconds = 125557
seconds = total_seconds % 60
minutes = (total_seconds / 60) % 60
hours = total_seconds / (60 * 60)
format("%02d:%02d:%02d", hours, minutes, seconds)
【讨论】:
如果您想更轻松地处理周、日、小时、分钟和秒,可以尝试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
【讨论】:
从 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
【讨论】:
我在这里发布了我的答案https://stackoverflow.com/a/62562658/2970582
ActiveSupport::Duration + inspect 给你有效的结果
【讨论】: