Подтвердить что ты не робот

Форматирование даты и времени Python без нулевого заполнения

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

Формат, который я использую сейчас:

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

Результат: 02/29/2012 05:03 PM
Желаемый: 29.02.2012 5:03 вечера

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Затем это: '4/10/2015 03:00 AM'

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

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

Ответ 3

Новая система форматирования строк предоставляет альтернативу 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 года.

Ответ 4

Принятый ответ не является правильным решением (IMHO) Собственные документированные методы:

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

% - d,% -H,% -I,% -j,% -m,% -M,% -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 доступен только для исполняемого файла native python. это не будет работать для реализаций python на основе cygwin.

Ответ 5

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

В окнах это:

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

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