Как сделать однозначное число двухзначным числом в рубине?

Time.new.month возвращает однозначное представление за любой месяц до октября (например, June is 6), но мне нужен двузначный формат (т.е. вместо 6 я хочу 06).

Я написал следующее решение, и я прошу увидеть некоторые другие/лучшие решения.

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

Ответ 1

Для ваших нужд я считаю, что лучше всего

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

Ответ 2

Вы можете использовать этот синтаксис printf:

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

или

str = '%02d' % 6

Итак:

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

См. документацию для String #%.

Ответ 3

Ответ Mat указывает, что вы можете использовать оператор % отлично, но я хотел бы указать еще один способ сделать это, используя метод rjust класса String:

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

Ответ 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"

Это даст вам легкий доступ ко всем обычным форматам даты и времени.

Ответ 5

Вы можете использовать sprintf:

sprintf("%02d", s)

например. в irb:

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