在Rails中,我试图将秒数转换为小时数。但恰巧的功能给了别的东西。
For example - Second = 164580
Output like : 45:43:0
经过一段时间(如24小时)后,它也可以转换为白天。我试图使用任何Ruby内置函数来获得总时数。
答案 0 :(得分:5)
你可以使用这样一个简单的方法:
def seconds_to_hours(seconds)
seconds / 3600
end
一分钟内有60秒,一小时内有60分钟。因此,如果您将秒数除以60*60
(即3600),然后将其向下舍入,您将得到小时数。
答案 1 :(得分:4)
现在我看到了你正在寻找的东西,我提供了这个:
def seconds_to_hms(sec)
[sec / 3600, sec / 60 % 60, sec % 60].map{|t| t.to_s.rjust(2,'0')}.join(':')
end
编辑:另一种选择,更简洁:
def seconds_to_hms(sec)
"%02d:%02d:%02d" % [sec / 3600, sec / 60 % 60, sec % 60]
end
示例输出;
seconds_to_hms(164580)
=> "45:43:00"
答案 2 :(得分:1)
这是将秒数转换为[x小时y分钟z秒的粗略但最简单的实现:
module Utils
class TimeUtil
def self.convert_to_h_m_s(seconds:)
seconds = seconds.to_i
_hours = seconds / 3600
seconds = seconds % 3600
_minutes = seconds / 60
_seconds = seconds % 60
str_arr = []
str_arr << "#{_hours} hours" if _hours > 0
str_arr << "#{_minutes} minutes" if _minutes > 0
str_arr << "#{_seconds} seconds" if _seconds > 0
str_arr.join(" ")
end
end
end
稍作调整,您就可以得到几个小时。
答案 3 :(得分:0)
Time.at(23600).utc.hour
应该给你一小时,不是吗?
答案 4 :(得分:0)
如果您只想显示小时作为输出,可以使用此功能:
Time.at(236).utc.strftime "%H"
价值&#34;%H:%M:%S&#34;代表小时:分钟:秒
您可以在此处详细了解:http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime
除此之外 - 功能时间仅限于24小时。所以你不能超过这个价值。
答案 5 :(得分:0)
在@hattenn的建议之后,我发布了该功能。
def convert_second_into_hours(calculated_seconds)
hours = calculated_seconds/(60*60)
remaining_seconds = calculated_seconds - ( hours*60*60 )
minutes = remaining_seconds / 60
seconds = remaining_seconds - ( minutes * 60 )
puts "#{hours}:#{minutes}:#{seconds}"
end
convert_second_into_hours(164580)
输出:
irb(main):118:0> def convert_second_into_hours(calculated_seconds)
irb(main):119:1> hours = calculated_seconds/(60*60)
irb(main):120:1> seconds = calculated_seconds - ( hours*60*60 )
irb(main):121:1> minutes = remaining_seconds / 60
irb(main):122:1> seconds = remaining_seconds - ( minutes * 60 )
irb(main):123:1> puts "#{hours}:#{minutes}:#{seconds}"
irb(main):124:1>end
=> :convert_second_into_hours
irb(main):125:0>convert_second_into_hours(164580)
45:43:0
=> nil