Python strftime %固定长度

问题描述 投票:0回答:3

我使用以下日期格式:

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

并且由于工作日的长度 (

%A
) 发生了变化, 我想总是打印工作日 10个字符,左补空格,右对齐。

类似

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

最简单的方法是什么?

python date format strftime
3个回答
2
投票

str.rjust(10)
正是这样做的:

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

您可能希望在格式字符串中使用 %M(分钟),而不是 %m(月),正如 @Ahmad 指出的那样

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

相反。


0
投票

这个怎么样:

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

杰克


0
投票

这大致相当于jfs的答案,但是你可以使用

.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)
© www.soinside.com 2019 - 2024. All rights reserved.