仅使用Ruby内置函数将秒转换为小时 - 除了天

时间:2015-03-06 21:45:30

标签: ruby-on-rails ruby datetime ruby-on-rails-4

在Rails中,我试图将秒数转换为小时数。但恰巧的功能给了别的东西。

For example - Second = 164580
Output like : 45:43:0

经过一段时间(如24小时)后,它也可以转换为白天。我试图使用任何Ruby内置函数来获得总时数。

6 个答案:

答案 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