Python форматирование даты и времени без нуля - PullRequest
61 голосов
/ 02 марта 2012

Существует ли формат для печати даты и времени Python, в котором не будет добавляться ноль для дат и времени?

Используемый сейчас формат:

mydatetime.strftime('%m/%d/%Y %I:%M%p')

Результат: 29.02.2012 05:03 PM
Желаемый: 29.02.2012 5:03 PM

Какой формат будет представлять месяц как «2» вместо «02 'и время как' 5:03 PM 'вместо '05: 03 PM'

Ответы [ 5 ]

91 голосов
/ 01 мая 2015

Другой альтернативный вариант, позволяющий избежать начального нулевого аспекта «все или ничего», заключается в том, чтобы поместить минус перед типом поля:

mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

Тогда это: '10.04.2015 03:00 AM'

Становится: '4/10/2015 3:00 AM'

При желании вы можете при желании поставить минус перед днем.

83 голосов
/ 02 марта 2012

Новая система форматирования строк предоставляет альтернативу strftime. Это вполне читабельно - на самом деле, это может быть предпочтительнее, чем strftime на этом счете. Не говоря уже о том, что он не имеет нулевой отметки:

>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'

Так как вы, вероятно, хотите заполнить нулями в поле минут, вы можете сделать это:

>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
'3/1/2012 20:00'

Если вы хотите использовать «обычное» время вместо «военного», вы все равно можете использовать стандартные спецификаторы strftime. Для наших целей удобно, что strftime предоставляет код для 12-часового времени, дополненного пробелом вместо начального нуля:

'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014  6:00PM'

Это становится несколько менее читабельным, увы. И, как указывает @mlissner, strftime не будет работать на некоторых (всех?) Платформах до 1900 года.

53 голосов
/ 02 марта 2012

Параметры форматирования, доступные с datetime.strftime(), будут заполнены нулями.Конечно, вы можете свернуть свою собственную функцию форматирования, но самое простое решение в этом случае может заключаться в последующей обработке результата datetime.strftime():

s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")

(то есть, если вы решите, что этодействительно стоит хлопот. Почему бы просто не оставить нули внутри?)

33 голосов
/ 10 марта 2017

Принятый ответ не является правильным решением (ИМХО) Надлежащие документированные методы:

В Linux "#" заменяется на "-":

% - d,% -H,% -I,% -j,% -m,% -M,% -S,% -S,% -U,% -w,% -W,% -y,% -Y

В Windows "-" заменяется на "#":

% # d,% # H,% # I,% # j,% # m,% # M,% # S,% # U,% # w,% # W,% # y,% # Y

#Linux
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

# Windows
mydatetime.strftime('%#m/%d/%Y %#I:%M%p')

Источник: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx

Как утверждает Sagneta: хэш-трюк # в Windows доступен только для собственного исполняемого файла Python. это не будет работать для реализаций Python на основе Cygwin.

6 голосов
/ 01 ноября 2016

Хороший ответ от Криса Фримена о Linux.

В Windows это:

mydate.strftime('%#m/%#d/%Y')

Мысль, которая может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...