Как мне написать час времени без начального нуля или пробела?

В программе на Ruby 1.9 я хочу отформатировать текущее время как Thu 1:51 PM, Какой код формата мне использовать для часа дня (1 в этом примере)?

Time.now.strftime '%a %I:%M %p' #=> "Thu 01:51 PM"
Time.now.strftime '%a %l:%M %p' #=> "Thu  1:51 PM"

%I имеет ведущий ноль (01). %l имеет ведущее место ( 1). Я не вижу никакого другого кода формата для часа в документации strftime. Я не могу использовать .lstrip потому что пространство находится в середине строки. Я мог бы использовать .gsub(/ +/, " "), но мне интересно, есть ли менее хакерский, более простой способ.

1 ответ

Решение
Time.now.strftime '%a %-l:%M %p' #=> "Thu 1:51 PM"

Написать %-l вместо %l, - убирает ведущие пробелы и нули.

Ты можешь использовать - с другими кодами формата тоже. Документация Ruby strftime даже упоминает %-m а также %-d, хотя он не упоминает, что вы можете использовать - с любым кодом. Таким образом, %-I даст тот же результат, что и %-l, Но я рекомендую %-l потому что используя l вместо I для меня это означает, что вы ничего не хотите в начале - пространство, которое оно пишет, выглядит более случайным.

Вы также можете увидеть исчерпывающий список Ruby 1.8 strftime коды формата, в том числе с - и подобные синтаксисы _ а также 0, В нем говорится, что Ruby 1.8 в Mac OS X не поддерживает эти расширенные синтаксисы, но не беспокойтесь: они работают в Ruby 1.9 на моей машине с OS X.

Другие вопросы по тегам