2015-07-22 64 views
2

我有此代码将分钟转换为“小时:分钟”格式。Ruby中的时间转换?

def time_conversion(minutes) 
    time = "" 
    time_hours = minutes/60 
    time_hours.round(0) 
    time_minutes = minutes % 60 
    time_minutes.round(2) 
    time = "#{time_hours}:#{time_minutes}" 
    return time 
end 

p time_conversion(360) 

但我的输出是“6:0”,当我希望它是“6:00”。我怎样才能清理这个代码(简化它),并完成我想要做的事情?

+0

我同意,但每个标题都不相同。根据用户对这个问题的搜索,可能会出现一个或另一个问题。 – wurde

回答

4
def time_conversion(mins) 
    hours, minutes = mins.divmod(60) 
    sprintf('%d:%02d', hours, minutes) 
end 

或者你甚至可以把它一个班轮:

def time_conversion(mins) 
    sprintf('%d:%02d', *mins.divmod(60)) 
end 

Numeric#divmod method返回整数除法的结果d模运算符的结果。 '%d'表示在这里插入一个整数。 '%02d'表示插入一个整数并显示至少两位数字,必要时用0填充。您也可以使用sprintf做更多事情。

+0

你能解释一下为什么你在单线图中使用了图示吗? – Shawn

+2

@Shawn'sprintf'的第一个参数是一个字符串,然后其余的参数是要替换为字符串的值列表。 'divmod'返回一个有两个值的数组。 '*'使得数组元素被使用,就好像它们被直接传递给方法一样。我不知道这个技术术语...... – JKillian

+1

@Shawn请参阅本文的“调用方法”部分:https://endofline.wordpress.com/2011/01/21/the-strange-ruby-图示/ – JKillian

1

使用格式化输出:

sprintf('%d:%02d', time_hours, time_minutes) 

或等价的:

'%d:%02d' % [time_hours, time_minutes] 
+0

我试图理解这部分:'%d:%02d'。你能否提供更多的见解? – Shawn

+1

@Shawn ['sprintf'参考手册](http://ruby-doc.org/core-2.1.2/Kernel.html#method-i-sprintf)。 –