Ruby - 什么&strftime相当于hhh:mm:ss?

时间:2015-04-08 04:06:24

标签: ruby-on-rails ruby strftime

我知道hh:mm:ss是time_object.strftime('%H:%M:%S')。我使用这种格式的时间超过了24小时,因此小时部分溢出。什么是获得hhh:mm:ss in strftime的正确方法?

编辑:请求的示例。

会发生什么:

Time.at(90000).utc.strftime('%H:%M:%S')
=> "01:00:00"

Time.at(432000).utc.strftime('%H:%M:%S')
=> "00:00:00"

我想要发生什么:

Time.at(90000).utc.something_else
=> "25:00:00"

Time.at(432000).utc.something_else
=> "120:00:00"

2 个答案:

答案 0 :(得分:3)

Ruby本身没有持续时间类,时间对象只指定时间点。因此,Time#strftime总是会有0-23范围内的小时数。持续时间以数字表示,1为一秒;不用说,Float没有strftime方法。

如果您需要持续时间,则需要自己制作,或使用已经为您完成的库(例如,duration)。

答案 1 :(得分:2)

继@ Amadan的解释之后,这里有一个简单的方法来计算你想要使用的时间字符串格式的时间偏移:

require 'time'

def new_time(basetime, offset)
  sign = (offset[0]=='-') ? - 1 : 1
  str = (sign==1) ? offset : offset[1..-1] 
  hrs, mins, secs = str.split(':').map(&:to_i)
  basetime + sign*(60*(60*hrs + mins) + secs)
end  

basetime = Time.parse('Apr 1, 2015') #=> 2015-04-01 00:00:00 -0700
new_time(basetime,   "8:22:34")      #=> 2015-04-01 08:22:34 -0700 
new_time(basetime,  "38:22:34")      #=> 2015-04-02 14:22:34 -0700 
new_time(basetime, "138:22:34")      #=> 2015-04-06 18:22:34 -0700 
new_time(basetime,  "-8:22:34")      #=> 2015-03-31 15:37:26 -0700