155

有没有办法使用 isoformats 提取月份和日期?假设今天的日期是 2013 年 3 月 8 日。

>>> d = datetime.date.today()
>>> d.month
3
>>> d.day
8

我想:

>>> d = datetime.date.today()
>>> d.month
03
>>> d.day
08

我可以通过编写 if 语句并连接前导 0 来做到这一点,以防日或月是单个数字,但我想知道是否有一种自动生成我想要的方法的方法。

4

2 回答 2

244

查看这些属性的类型:

In [1]: import datetime

In [2]: d = datetime.date.today()

In [3]: type(d.month)
Out[3]: <type 'int'>

In [4]: type(d.day)
Out[4]: <type 'int'>

两者都是整数。所以没有自动的方法来做你想做的事。所以狭义上,你的问题的答案是否定的。

如果您想要前导零,则必须以一种或另一种方式格式化它们。为此,您有多种选择:

In [5]: '{:02d}'.format(d.month)
Out[5]: '03'

In [6]: '%02d' % d.month
Out[6]: '03'

In [7]: d.strftime('%m')
Out[7]: '03'

In [8]: f'{d.month:02d}'
Out[8]: '03'
于 2013-03-19T20:24:35.800 回答
50

您可以使用字符串格式化程序用零填充任何整数。它的行为就像 C 的一样printf

>>> d = datetime.date.today()
>>> '%02d' % d.month
'03'

针对 py36 更新: 使用 f 字符串!对于 general int,您可以使用d格式化程序并明确告诉它用零填充:

 >>> d = datetime.date.today()
 >>> f"{d.month:02d}"
 '07'

但是datetimes 是特殊的,并且带有已经被零填充的特殊格式化程序:

 >>> f"{d:%d}"  # the day
 '01'
 >>> f"{d:%m}"  # the month
 '07'
于 2013-03-19T20:14:37.167 回答