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

185 投票
2 回答
290853 浏览
提问于 2025-04-17 19:40

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

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

我想要:

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

我可以通过写一些条件语句来实现这个目标,如果日期或月份是个位数的话,就在前面加个0。不过我在想,是否有一种自动的方法可以生成我想要的结果。

2 个回答

58

你可以使用字符串格式化的方法来给任何整数前面加零。这就像C语言里的printf一样。

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

更新于py36: 使用f-strings!对于一般的int类型,你可以使用d格式化符,并明确告诉它要用零填充:

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

但是datetime类型是特别的,它们有专门的格式化方式,已经自动加了零:

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

看看这些属性的类型:

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'

撰写回答