从Python日期中提取两位数的月份和日期
有没有办法用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'