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

cod*_*nob 109 python datetime iso

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

>>> d = datetime.date.today()
>>> d.month
3
>>> d.day
8
Run Code Online (Sandbox Code Playgroud)

我想要:

>>> d = datetime.date.today()
>>> d.month
03
>>> d.day
08
Run Code Online (Sandbox Code Playgroud)

我可以通过编写if语句和连接前导0来实现这一点,以防日期或月份是单个数字但是想知道是否有自动生成我想要的方法.

Rol*_*ith 168

看看这些属性的类型:

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'>
Run Code Online (Sandbox Code Playgroud)

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

如果你想要前导零,你将不得不以这种或那种方式格式化它们.为此你有几个选择:

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'
Run Code Online (Sandbox Code Playgroud)

  • 只需添加另一种格式化方法来获取填充的零字符串,就可以使用`zfill()`函数,如下所示:`str(d.month).zfill(2)` (3认同)

edu*_*ffy 22

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

>>> d = datetime.date.today()
>>> '%02d' % d.month
'03'
Run Code Online (Sandbox Code Playgroud)

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

 >>> d = datetime.date.today()
 >>> f"{d.month:02d}"
 '07'
Run Code Online (Sandbox Code Playgroud)

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

 >>> f"{d:%d}"  # the day
 '01'
 >>> f"{d:%m}"  # the month
 '07'
Run Code Online (Sandbox Code Playgroud)

  • 而不是一个膨胀的教科书页面,这个答案实际上给你一个工作一个班轮,荣誉 (5认同)