2015-07-22 63 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)。 –