Time.new.month возвращает однозначное представление любого месяца до октября (например, июнь - 6), но я хочу двузначный формат (т. Е. Вместо 6 Я хочу 06).
Time.new.month
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 -подобный синтаксис:
printf
irb> '%02d' % 6 => "06"
или
str = '%02d' % 6
Итак:
s = '%02d' % Time.new.month => "06"
См. Документацию для Строка #% .
Ответ Мата, указывающий на то, что вы можете использовать оператор %, хорош, но я хотел бы указать на другой способ сделать это, используя метод rjust класса String:
%
rjust
String
str = 6.to_s.rjust(2,'0') # => "06"
Если вы пытаетесь отформатировать всю дату или дату и время (а не только месяц), вы можете использовать strftime:
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)
например. в ирб:
>> sprintf("%02d", s) => "06"