2016-02-04 3 views
3

Я использую следующий формат даты:Python STRFTIME% Фиксированная длина

d.strftime("%A, %d %B %Y %H:%m") 

и так как длина будний день (%A) изменения, Я хотел бы всегда печатать будний день с 10 символов, пробел слева и выровняйте его вправо.

Что-то вроде

d.strftime("10%A, %d %B %Y %H:%m") 

Что это самый простой способ?

ответ

0

Как об этом:

d.strftime("%A") + " " * (10 - len(d.strftime("%A")) + "," + d.strftime("%d %B %Y %H:%m") 

Джек

+0

Это рабочий подход. Благодаря! – Spanky

2

str.rjust(10) делает именно это:

s = d.strftime('%A').rjust(10) + d.strftime(', %d %B %Y %H:%M') 

Вполне вероятно, что вы хотите %M (minutes), not %m (months) в вашем формате строки как @Ahmad pointed out.

В Python 3.6 +, чтобы получить более сжатую версию, можно злоупотреблять вложенный F-строку:

>>> f"{f'{d:%A}':>10}, {d:%d %B %Y %H:%M}" 
' Friday, 15 December 2017 21:31' 

Предпочитает стандартные форматы время, такие как RFC 3339:

>>> from datetime import datetime 
>>> datetime.utcnow().isoformat() + 'Z' 
'2016-02-05T14:00:43.089828Z' 

Или rfc 2822:

>>> from email.utils import formatdate 
>>> formatdate(usegmt=True)           
'Fri, 05 Feb 2016 14:00:51 GMT' 

inste объявление.

+0

Используя python 3.5.2, я должен использовать% M (капитал M). В противном случае минут всегда 10. – Ahmad

0

Это примерно эквивалентно jfs's answer,, но вы можете use .format(), чтобы сделать его немного короче:

s = '{:>10}, {:%d %B %Y %H:%m}'.format(d.strftime('%A'), d) 

или если вы кладете больше, чем просто дата в строку:

args = { 
    'weekday' = d.strftime('%A'), 
    'date' = d, 
    'foo' = some_other_stuff(), 
    'bar' = 17.5422, 
} 
s = '{weekday:>10}, {date:%d %B %Y %H:%m} {foo} {bar:>3.2f}'.format(**args) 
Смежные вопросы