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 |