Как сделать однозначное число двухзначным в рубине? - PullRequest
14 голосов
/ 18 июня 2011

Time.new.month возвращает однозначное представление любого месяца до октября (например, июнь - 6), но я хочу двузначный формат (т. Е. Вместо 6 Я хочу 06).

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

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

Ответы [ 5 ]

29 голосов
/ 18 июня 2011

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

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

25 голосов
/ 18 июня 2011

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

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

или

str = '%02d' % 6

Итак:

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

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

8 голосов
/ 18 июня 2011

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

str = 6.to_s.rjust(2,'0')  # => "06"
4 голосов
/ 18 июня 2011

Если вы пытаетесь отформатировать всю дату или дату и время (а не только месяц), вы можете использовать strftime:

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

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

2 голосов
/ 18 июня 2011

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

sprintf("%02d", s)

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

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