@scores_raw.each do |score_raw|
# below is code if time was being sent in milliseconds
hh = ((score_raw.score.to_i)/100)/3600
mm = (hh-hh.to_i)*60
ss = (mm-mm.to_i)*60
crumbs = [hh,mm,ss]
sum = crumbs.first.to_i*3600+crumbs[1].to_i*60+crumbs.last.to_i
@scores << {:secs => sum, :hms => hh.round.to_s+":"+mm.round.to_s+":"+ss.round.to_s}
@scores_hash << {:secs => sum, :hms => hh.round.to_s+":"+mm.round.to_s+":"+ss.round.to_s}
# milliseconds case end
end
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码,但我讨厌它.它看起来很乱.它不仅看起来很棒.也许某人的红宝石专家可以通过链接收集,减少等并使其看起来很好来告诉如何做到这一点?
时间类ruby提供了at从秒开始获取时间的功能.使用它会治愈.
miliseconds = 32290928
seconds = miliseconds/1000
Time.at(seconds).strftime("%H:%M:%S")
Run Code Online (Sandbox Code Playgroud)
或者获得时间
#Get UTC Time
Time.at(seconds).utc.strftime("%H:%M:%S")
Run Code Online (Sandbox Code Playgroud)
您可以将其包装在辅助方法中:
def format_milisecs(m)
secs, milisecs = m.divmod(1000) # divmod returns [quotient, modulus]
mins, secs = secs.divmod(60)
hours, mins = mins.divmod(60)
[secs,mins,hours].map { |e| e.to_s.rjust(2,'0') }.join ':'
end
format_milisecs 10_600_00
=> "03:13:20"
Run Code Online (Sandbox Code Playgroud)