将持续时间以秒为单位转换为小时和分钟并跳过空值

Rom*_*man 7 ruby regex

我们有一个持续时间(以秒为单位)值始终大于 60(1 分钟)的时间跟踪模型。

如果在小时或分钟开始时它们不为零且不为零,我需要将持续时间转换为小时和分钟。例如:

duration1 = 63000  # expected value:  17 h 30 m
duration2 = 28800  # expected value:  8 h
duration3 = 1800   # expected value:  30 m
duration4 = 300    # expected value:  5 m
Run Code Online (Sandbox Code Playgroud)

我几乎做到了,但是零值有一个小问题:

Time.at(duration1).utc.strftime('%H h %M m').sub!(/^0/, '') 
# 17 h 30 m

Time.at(duration2).utc.strftime('%H h %M m').sub!(/^0/, '') 
# 8 h 00 m

Time.at(duration3).utc.strftime('%H h %M m').sub!(/^0/, '') 
# 0 h 30 m

Time.at(duration4).utc.strftime('%H h %M m').sub!(/^0/, '') 
# 0 h 05 m
Run Code Online (Sandbox Code Playgroud)

感谢您的回答。

tad*_*man 4

为什么不只是像这样简单的事情:

def to_hms(time)
  hours = time / 3600
  minutes = (time / 60) % 60

  if (hours > 0 and minutes > 0)
    '%d h %d m' % [ hours, minutes ]
  elsif (hours > 0)
    '%d h' % hours
  elsif (minutes > 0)
    '%d m' % minutes
  end
end
Run Code Online (Sandbox Code Playgroud)

产生预期结果的地方:

to_hms(63000)
# => "17 h 30 m"
to_hms(28800)
# => "8 h"
to_hms(1800)
# => "30 m"
Run Code Online (Sandbox Code Playgroud)