从 Python 日期中提取两位数的月和日

有没有办法使用 isoformat 提取月份和日期? 让我们假设今天的日期是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,但是我想知道是否有一种自动生成我想要的结果的方法。

262256 次浏览

你可以使用一个字符串格式化程序来填充任何带零的整数。它的作用就像 C 的 printf

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

更新为 py36: 使用 f-string!对于一般的 int,您可以使用 d格式化程序,并明确地告诉它用零填充:

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

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

 >>> f"{d:%d}"  # the day
'01'
>>> f"{d:%m}"  # the month
'07'

看看这些属性的类型:

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'