如何获得一个月的最后一天?
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
【讨论】:
以上是关于如何获得一个月的最后一天?的主要内容,如果未能解决你的问题,请参考以下文章