2016-02-04 19 views
3

我使用以下日期格式:的Python的strftime%A固定长度

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') 

您在格式字符串作为@Ahmad pointed out%M (minutes), not %m (months)这是可能的。

在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)