Hướng dẫn python last business day of month - python ngày làm việc cuối cùng của tháng

Tôi đang cố gắng tìm ngày làm việc cuối cùng trong tháng. Tôi đã viết mã dưới đây cho điều đó và nó hoạt động tốt nhưng tôi đã tự hỏi liệu có cách làm sạch hơn không?

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)

Cảm ơn trước!

Khi được hỏi ngày 25 tháng 5 năm 2016 lúc 15:16May 25, 2016 at 15:16

Hướng dẫn python last business day of month - python ngày làm việc cuối cùng của tháng

2

Tôi sử dụng những điều sau:

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)

Đã trả lời ngày 13 tháng 9 năm 2016 lúc 20:08Sep 13, 2016 at 20:08

ElkeelkeElke

4714 Huy hiệu bạc9 Huy hiệu Đồng4 silver badges9 bronze badges

2

Giả sử bạn muốn có được những ngày làm việc cuối cùng trong tháng đến hết hai năm tới, những điều sau đây sẽ hoạt động.

   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')

Đã trả lời ngày 12 tháng 12 năm 2016 lúc 15:46Dec 12, 2016 at 15:46

nyan314snnyan314snnyan314sn

1.6743 huy hiệu vàng16 Huy hiệu bạc28 Huy hiệu đồng3 gold badges16 silver badges28 bronze badges

Đối với người hâm mộ một lớp:

import calendar

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

Xtheking

5652 Huy hiệu vàng8 Huy hiệu bạc29 Huy hiệu đồng2 gold badges8 silver badges29 bronze badges

Đã trả lời ngày 15 tháng 6 năm 2020 lúc 15:53Jun 15, 2020 at 15:53

Hướng dẫn python last business day of month - python ngày làm việc cuối cùng của tháng

VBOBCATVBOBCATVBobCat

2.3662 Huy hiệu vàng26 Huy hiệu bạc 50 Huy hiệu Đồng2 gold badges26 silver badges50 bronze badges

3

Tôi sử dụng điều này cho ngày làm việc đầu tiên trong tháng nhưng nó cũng có thể được sử dụng cho ngày làm việc cuối cùng trong tháng:

import time
import datetime
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay
from dateutil.relativedelta import relativedelta

#Create dates needed to be entered as parameters
today = datetime.date.today()
first = today.replace(day=1)
#End of the Prior Month
eopm = first - datetime.timedelta(days=1)
eopm = eopm.strftime("%Y%m%d")
#Create first business day of current month date
us_bd = CustomBusinessDay(calendar=USFederalHolidayCalendar())
focm = first
nxtMo = today + relativedelta(months=+1)
fonm = nxtMo.replace(day=1)
eocm = fonm - datetime.timedelta(days=1)
first_bd = pd.DatetimeIndex(start = focm, end = eocm, freq= us_bd)
first_bd = first_bd.strftime("%Y%m%d")
#First Business Day of the Month
first_bd = first_bd[0]
#Last Business Day of the Month
lst_day = len(first_bd)-1
last_bd = first_bd[lst_day]

Tôi đã để lại một số mã trong đó không cần thiết cho ngày làm việc cuối cùng của tháng hiện tại, nhưng có thể hữu ích cho ai đó.

Đã trả lời ngày 4 tháng 1 năm 2017 lúc 15:48Jan 4, 2017 at 15:48

Hướng dẫn python last business day of month - python ngày làm việc cuối cùng của tháng

d84_n1nj4d84_n1nj4d84_n1nj4

1.6736 huy hiệu vàng23 Huy hiệu bạc38 Huy hiệu đồng6 gold badges23 silver badges38 bronze badges

Với Rollforward (D), bạn sẽ bỏ qua vào tháng tới nếu ngày qua ngày làm việc cuối cùng của tháng hiện tại, vì vậy dưới đây có thể an toàn hơn cho bất kỳ ngày nào trong tháng:

from datetime import date
import pandas as pd

d = date(2011, 12, 31) # a caturday
pd.bdate_range(end=pd.offsets.MonthEnd().rollforward(d), periods=1)
pd.offsets.BMonthEnd().rollforward(d)

Đã trả lời ngày 2 tháng 7 năm 2020 lúc 10:34Jul 2, 2020 at 10:34

zephyr707zephyr707zephyr707

Huy hiệu đồng 1431 Bạc7 Huy hiệu Đồng1 silver badge7 bronze badges

Tôi cần một cái gì đó có thể đọc được trực quan và đã chọn những điều sau đây:

from datetime import datetime, timedelta
import pandas as pd

def isMonthLastBusinessDay(date):
    lastDayOfMonth = date + pd.offsets.MonthEnd(0)
    isFriday = date.weekday() == 4
    if (date.weekday() < 5 and lastDayOfMonth == date) or (isFriday and lastDayOfMonth == date+timedelta(days=1)) or (isFriday and lastDayOfMonth == date+timedelta(days=2)):
        return True
    else:
        return False

Đã trả lời ngày 12 tháng 5 năm 2021 lúc 12:13May 12, 2021 at 12:13

NHBOENHBOEnhboe

Huy hiệu 111 Đồng1 bronze badge