如何获得一个月的最后一天?

Posted

技术标签:

【中文标题】如何获得一个月的最后一天?【英文标题】:How to get the last day of the month? 【发布时间】:2010-09-07 18:17:33 【问题描述】:

有没有一种方法可以使用 Python 的标准库轻松确定(即一个函数调用)给定月份的最后一天?

如果标准库不支持,dateutil 包是否支持?

【问题讨论】:

【参考方案1】:

更简单点:

import datetime
now = datetime.datetime.now()
datetime.date(now.year, 1 if now.month==12 else now.month+1, 1) - datetime.timedelta(days=1)

【讨论】:

【参考方案2】:

考虑到不同月份的天数不相等,这是适用于每个月的标准解决方案。

import datetime
ref_date = datetime.today() # or what ever specified date

end_date_of_month = datetime.strptime(datetime.strftime(ref_date + relativedelta(months=1), '%Y-%m-01'),'%Y-%m-%d') + relativedelta(days=-1)

在上面的代码中,我们只是在我们选择的日期上添加一个月,然后导航到该月的第一天,然后从该日期减去一天。

【讨论】:

【参考方案3】:

对我来说,更简单的方法是使用 pandas(两行解决方案):

    from datetime import datetime
    import pandas as pd

    firstday_month = datetime(year, month, 1)
    lastday_month = firstday_month + pd.offsets.MonthEnd(1)

另一种方法是:取当月的第一天,然后加一个月,折一天:

    from datetime import datetime
    import pandas as pd

    firstday_month = datetime(year, month, 1)
    lastday_month = firstday_month + pd.DateOffset(months=1) - pd.DateOffset(days=1)

【讨论】:

【参考方案4】:

这就是我的方式 - 只有两行的函数:

from dateutil.relativedelta import relativedelta

def last_day_of_month(date):
    return date.replace(day=1) + relativedelta(months=1) - relativedelta(days=1)

例子:

from datetime import date

print(last_day_of_month(date.today()))
>> 2021-09-30

【讨论】:

【参考方案5】:

这个对我有用:

df['daysinmonths'] = df['your_date_col'].apply(lambda t: pd.Period(t, freq='S').days_in_month)

参考自: https://***.com/a/66403016/16607636

【讨论】:

以上是关于如何获得一个月的最后一天?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得一个月的最后一天?

python怎么获得每个月的第一天和最后一天

问与答:我如何知道一个月的最后一天是哪一天?

如何从日期找到一个月的最后一天?

Javascript / jQuery:如何检查日期是不是是一个月的最后一天

js代码实现,如何获取当前月份的最后一天