获取每月的最后一天

2024-04-20 00:06:10 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

编辑:请看@Blair Conrad的答案


>>> import datetime
>>> datetime.date(2000, 2, 1) - datetime.timedelta(days=1)
datetime.date(2000, 1, 31)

我之前在查看documentation for the calendar module时没有注意到这一点,但是名为monthrange的方法提供了以下信息:

monthrange(year, month)
    Returns weekday of first day of the month and number of days in month, for the specified year and month.

>>> import calendar
>>> calendar.monthrange(2002,1)
(1, 31)
>>> calendar.monthrange(2008,2)
(4, 29)
>>> calendar.monthrange(2100,2)
(0, 28)

所以:

calendar.monthrange(year, month)[1]

似乎是最简单的方法。

为了清楚起见,monthrange也支持闰年:

>>> from calendar import monthrange
>>> monthrange(2012, 2)
(2, 29)

My previous answer仍然有效,但显然是次优的。

如果不想导入calendar模块,一个简单的两步函数也可以是:

import datetime

def last_day_of_month(any_day):
    next_month = any_day.replace(day=28) + datetime.timedelta(days=4)  # this will never fail
    return next_month - datetime.timedelta(days=next_month.day)

输出:

>>> for month in range(1, 13):
...     print last_day_of_month(datetime.date(2012, month, 1))
...
2012-01-31
2012-02-29
2012-03-31
2012-04-30
2012-05-31
2012-06-30
2012-07-31
2012-08-31
2012-09-30
2012-10-31
2012-11-30
2012-12-31

相关问题 更多 >