日期时间字符串格式对齐

时间:2013-06-28 15:34:00

标签: python datetime string-formatting

在Python 2.7中,我想使用字符串格式的模板打印日期时间对象。由于某些原因,使用左/右对齐不能正确打印字符串。

import datetime
dt = datetime.datetime(2013, 6, 26, 9, 0)
l = [dt, dt]
template = "{0:>25} {1:>25}" # right justify
print template.format(*l)  #print items in the list using template

这将导致:

>25 >25

而不是

  2013-06-26 09:00:00       2013-06-26 09:00:00

是否有一些技巧可以使用字符串格式模板打印日期时间对象?

当我将datetime对象强制转换为str()

时似乎有效
print template.format(str(l[0]), str(l[1]))

但我宁愿不必这样做,因为我正在尝试打印一个值列表,其中一些不是字符串。制作字符串模板的重点是打印列表中的项目。

我是否遗漏了有关字符串格式的内容,或者这对任何人来说都像是一个python错误?


@mgilson指出了我在文档中遗漏的解决方案。 link

  

目前支持两个转换标志:'!s'调用str()   在值上,和'!r'调用repr()。

     

一些例子:

"Harold's a clever {0!s}"        # Calls str() on the argument first
"Bring out the holy {name!r}"    # Calls repr() on the argument first

3 个答案:

答案 0 :(得分:4)

这里的问题是datetime个对象有一个__format__方法,它基本上只是datetime.strftime的别名。当你进行格式化时,格式化函数会传递字符串'>25',如你所见,dt.strftime('>25')只返回'>25'

此处的解决方法是指定应使用!s显式将字段格式化为字符串:

import datetime
dt = datetime.datetime(2013, 6, 26, 9, 0)
l = [dt, dt]
template = "{0!s:>25} {1!s:>25} " 
out = template.format(*l)
print out

(在python2.6和2.7上测试)。

答案 1 :(得分:2)

datetime.datetimeformat method。你需要将它转换为str。

>>> '{:%Y/%m/%d}'.format(dt)
'2013/06/26'
>>> '{:>20}'.format(dt)
'>20'
>>> '{:>20}'.format(str(dt))
' 2013-06-26 09:00:00'

>>> import datetime
>>> dt = datetime.datetime(2013, 6, 26, 9, 0)
>>> l = [dt, dt]
>>> template = "{0:>25} {1:>25}"
>>> print template.format(*l)
>25 >25
>>> print template.format(*map(str, l))
      2013-06-26 09:00:00       2013-06-26 09:00:00

答案 2 :(得分:1)

试试这个:

print template.format(*map(str, l))
=>      2013-06-26 09:00:00       2013-06-26 09:00:00

首先将datetime个对象转换为字符串,然后使用format方法格式化,然后没有问题。