Как сделать однозначное число двухзначным числом в рубине?
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"