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

时间:2011-06-18 16:50:44

标签: ruby number-formatting

Time.new.month返回10月之前任意月份的单个数字表示(例如,6月为6),但我想要一个2位数格式(即我希望{而不是6 { {1}})。

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

06

5 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:23)

您可以使用此printf语法:

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

str = '%02d' % 6

所以:

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

请参阅String#%的文档。

答案 2 :(得分:8)

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

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

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:2)

您可以使用sprintf:

sprintf("%02d", s)

e.g。在irb:

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