先说结论:
- python3.7以上,calendar中有monthlen这个方法,用起来更方便。
- python3.6没有这个方法,使用calendar.monthrange这个方法吧。
用法说明
>>> import calendar
>>> calendar.monthrange(2010,10)[1]
31
>>> calendar.monthrange(2020,3)
(6, 31)
其实这种方法随便一搜一大把,我看到的全都是使用calendar.monthrange这个方法,返回一个元祖,第一个值代表该月第一天是周几,第二个参数代表该月有多少天。
>>> import calendar,datetime
>>> calendar.monthlen(2020,2)
29
>>> calendar.monthlen(2020,3)
31
>>> today = datetime.date.today()
>>> calendar.monthlen(today.year,today.month)
31
打开calendar.py源码,发现其中还有monthlen这个方法更适用一些,效果如上。
calendar.py中的源码
def monthrange(year, month):
"""Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for
year, month."""
if not 1 <= month <= 12:
raise IllegalMonthError(month)
day1 = weekday(year, month, 1)
ndays = mdays[month] + (month == February and isleap(year))
return day1, ndays
def monthlen(year, month):
return mdays[month] + (month == February and isleap(year))
另外只使用datetime模块的方法:
>>> import datetime
>>> (datetime.date(2020,3,1) - datetime.date(2020,2,1)).days
29
>>> today = datetime.date.today()
>>> ((today.replace(day=28) + datetime.timedelta(days=4)).replace(day=1)-datetime.timedelta(days=1)).day
31
# 先计算出下个月的第一天,再减一天,取得该月的最后一天,最后取出day
python版本问题
python3.6中的效果,没有monthlen方法
zang@zang-PC:~$ python3.6
>>> import calendar
>>> calendar.monthlen(2020,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
python3.7中的效果
zang@zang-PC:~$ python3.7
>>> import calendar
>>> calendar.monthlen(2020,3)
31