在python中找到一个月的最后一个工作日

tky*_*ass 8 python datetime calendar

我想找到这个月的最后一个工作日.我为此编写了下面的代码并且工作正常,但我想知道是否有更清洁的方法呢?

from  datetime import date,timedelta
import datetime
import calendar

today=datetime.date.today()

last = today.replace(day=calendar.monthrange(today.year,today.month)[1])

if last.weekday()<5:
    print last

else:
    print last-timedelta(days=1+last.weekday()-5)
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Elk*_*lke 12

我使用以下内容:

from pandas.tseries.offsets import BMonthEnd
from datetime import date

d=date.today()

offset = BMonthEnd()

#Last day of current month
offset.rollforward(d)

#Last day of previous month
offset.rollback(d)
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用熊猫补偿功能`CustomBusinessMonthEnd`定义自己的工作月。您可以在此处找到文档:http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.tseries.offsets.CustomBusinessMonthEnd.html#pandas.tseries.offsets.CustomBusinessMonthEnd (2认同)

nya*_*4sn 7

假设您希望获得本月的最后一个工作日直到未来两年结束,以下方法将起作用。

   import pandas as pd
   import datetime

   start = datetime.date.today()
   end = datetime.date(start.year+2, 12, 31)
   bussiness_days_rng =pd.date_range(start, end, freq='BM')
Run Code Online (Sandbox Code Playgroud)


VBo*_*Cat 5

对于单线粉丝:

import calendar

def last_business_day_in_month(year: int, month: int) -> int:
    return max(calendar.monthcalendar(year, month)[-1:][0][:5])
Run Code Online (Sandbox Code Playgroud)

  • @xtheking:在什么条件下`[-1:][0]`与`[-1]`不同?我认为它可以更短/更清晰...... (2认同)

Tan*_*anu 0

您可以用来Pandas获取工作日。请参阅http://pandas.pydata.org/pandas-docs/stable/timeseries.html

您也可以参考此https://pypi.python.org/pypi/business_calendar/进行简单的工作日计算。