如何在ruby中将单个数字编号设为两位数?

Time.new.month返回十月之前任何月份的单个数字表示(例如六月是6 ),但我想要一个2位数格式(即代替6我想要06 )。

我写了以下解决方案,我要求看一些其他/更好的解决方案。

 s = 6.to_s; s[1]=s[0]; s[0] = '0'; s #=> '06' 

根据您的需要,我认为最好的仍然是

 Time.strftime("%m") 

如上所述,但对于一般用例,我使用的方法是

 str = format('%02d', 4) puts str 

根据上下文我也使用这个做同样的事情:

 str = '%02d %s %04d' % [4, "a string", 56] puts str 

以下是包含所有支持格式的文档: http : //ruby-doc.org/core-2.3.1/Kernel.html#method-i-sprintf

您可以使用这种printf的语法:

 irb> '%02d' % 6 => "06" 

要么

 str = '%02d' % 6 

所以:

 s = '%02d' % Time.new.month => "06" 

请参阅String#%的文档。

Mat的回答指出你可以使用%运算符很棒,但我想指出另一种方法,使用String类的rjust方法:

 str = 6.to_s.rjust(2,'0') # => "06" 

如果您尝试格式化整个日期或日期和时间(而不仅仅是月份),则可能需要使用strftime

 m = Time.now.strftime('%m') # => "06" t = Time.now.strftime('%Y-%m-%dT%H:%M:%SZ%z') # => "2011-06-18T10:56:22Z-0700" 

这将使您可以轻松访问所有常用的日期和时间格式。

你可以使用sprintf:

 sprintf("%02d", s) 

例如在irb:

 >> sprintf("%02d", s) => "06"