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

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

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

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

Chủ đề