Hướng dẫn get last business day python - bắt trăn ngày làm việc cuối cùng

97

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi cần trừ ngày làm việc từ ngày hiện tại.

Tôi hiện có một số mã cần luôn luôn chạy vào ngày làm việc gần đây nhất. Vì vậy, có thể là hôm nay nếu chúng ta đến thứ Hai đến thứ Sáu, nhưng nếu là thứ bảy hoặc chủ nhật thì tôi cần phải đặt nó trở lại vào thứ Sáu trước cuối tuần. Tôi hiện có một số mã khá cồng kềnh để làm điều này:clunky code to do this:

 lastBusDay = datetime.datetime.today()
 if datetime.date.weekday(lastBusDay) == 5:      #if it's Saturday
     lastBusDay = lastBusDay - datetime.timedelta(days = 1) #then make it Friday
 elif datetime.date.weekday(lastBusDay) == 6:      #if it's Sunday
     lastBusDay = lastBusDay - datetime.timedelta(days = 2); #then make it Friday

Có cách nào tốt hơn?

Tôi có thể nói Timedelta làm việc trong các ngày trong tuần chứ không phải là ngày theo lịch không?

Hướng dẫn get last business day python - bắt trăn ngày làm việc cuối cùng

SMCI

30.7K18 Huy hiệu vàng110 Huy hiệu bạc145 Huy hiệu đồng18 gold badges110 silver badges145 bronze badges

hỏi ngày 8 tháng 2 năm 2010 lúc 20:47Feb 8, 2010 at 20:47

Hướng dẫn get last business day python - bắt trăn ngày làm việc cuối cùng

Thomas Brownethomas BrowneThomas Browne

22.7K28 Huy hiệu vàng73 Huy hiệu bạc113 Huy hiệu đồng28 gold badges73 silver badges113 bronze badges

5

Sử dụng gấu trúc!

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))

Vì hôm nay là thứ Năm, ngày 26 tháng 9, điều đó sẽ cung cấp cho bạn một đầu ra của:

datetime.datetime(2013, 9, 20, 14, 8, 4, 89761)

Đã trả lời ngày 26 tháng 9 năm 2013 lúc 19:16Sep 26, 2013 at 19:16

4

Nếu bạn muốn bỏ qua các kỳ nghỉ của chúng tôi cũng như cuối tuần, điều này đã làm việc cho tôi (sử dụng Pandas 0,23,3):

import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay
US_BUSINESS_DAY = CustomBusinessDay(calendar=USFederalHolidayCalendar())
july_5 = pd.datetime(2018, 7, 5)
result = july_5 - 2 * US_BUSINESS_DAY # 2018-7-2

Để chuyển đổi sang đối tượng Ngày Python, tôi đã làm điều này:

result.to_pydatetime().date()

Đã trả lời ngày 25 tháng 7 năm 2018 lúc 21:57Jul 25, 2018 at 21:57

Lakenenlakenenlakenen

3.2365 huy hiệu vàng25 Huy hiệu bạc39 Huy hiệu đồng5 gold badges25 silver badges39 bronze badges

Có lẽ mã này có thể giúp:

lastBusDay = datetime.datetime.today()
shift = datetime.timedelta(max(1,(lastBusDay.weekday() + 6) % 7 - 3))
lastBusDay = lastBusDay - shift

Ý tưởng là vào thứ Hai, bạn phải quay lại 3 ngày, vào Chủ nhật 2 và 1 vào bất kỳ ngày nào khác.

Tuyên bố

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
8 chỉ cần tái hiện vào thứ Hai từ 0 đến 6.

Thực sự không biết liệu điều này có tốt hơn về mặt hiệu suất hay không.

Sẽ

4,4551 Huy hiệu vàng25 Huy hiệu bạc48 Huy hiệu đồng1 gold badge25 silver badges48 bronze badges

Đã trả lời ngày 1 tháng 2 năm 2012 lúc 10:25Feb 1, 2012 at 10:25

TMCTMCTMC

4514 Huy hiệu bạc5 Huy hiệu Đồng4 silver badges5 bronze badges

Disclamer: Tôi là tác giả ... I'm the author...

Tôi đã viết một gói thực hiện chính xác điều này, tính toán ngày kinh doanh. Bạn có thể sử dụng đặc điểm kỹ thuật trong tuần tùy chỉnh và ngày lễ.

Tôi đã có vấn đề chính xác này khi làm việc với dữ liệu tài chính và không tìm thấy bất kỳ giải pháp nào có sẵn đặc biệt dễ dàng, vì vậy tôi đã viết một giải pháp.

Hy vọng điều này là hữu ích cho người khác.

https://pypi.python.org/pypi/business_calendar/

Đã trả lời ngày 22 tháng 6 năm 2014 lúc 14:21Jun 22, 2014 at 14:21

Hướng dẫn get last business day python - bắt trăn ngày làm việc cuối cùng

3

Nếu ai đó đang tìm kiếm giải pháp tôn trọng các ngày lễ (không có bất kỳ thư viện khổng lồ nào như gấu trúc), hãy thử chức năng này:

import holidays
import datetime


def previous_working_day(check_day_, holidays=holidays.US()):
    offset = max(1, (check_day_.weekday() + 6) % 7 - 3)
    most_recent = check_day_ - datetime.timedelta(offset)
    if most_recent not in holidays:
        return most_recent
    else:
        return previous_working_day(most_recent, holidays)

check_day = datetime.date(2020, 12, 28)
previous_working_day(check_day)

sản xuất:

datetime.date(2020, 12, 24)

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

Hướng dẫn get last business day python - bắt trăn ngày làm việc cuối cùng

ZDPO STERZDPO STERZdPo Ster

2704 Huy hiệu bạc10 Huy hiệu đồng4 silver badges10 bronze badges

Gói

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
9 làm điều này.

Giả sử ngày của bạn là 04 tháng 9 năm 2017. Mặc dù là một ngày thứ Hai, đó là một ngày lễ ở Mỹ (Ngày Lao động). Vì vậy, ngày làm việc gần đây nhất là thứ Sáu, ngày 1 tháng 9.

>>> import timeboard.calendars.US as US
>>> clnd = US.Weekly8x5()
>>> clnd('04 Sep 2017').rollback().to_timestamp().date()
datetime.date(2017, 9, 1)

Ở Anh, ngày 04 tháng 9 năm 2017 là ngày làm việc thường xuyên, vì vậy ngày làm việc gần đây nhất là chính nó.

>>> import timeboard.calendars.UK as UK
>>> clnd = UK.Weekly8x5()
>>> clnd('04 Sep 2017').rollback().to_timestamp().date()
datetime.date(2017, 9, 4)

Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của Timboard.

Đã trả lời ngày 12 tháng 3 năm 2018 lúc 8:12Mar 12, 2018 at 8:12

Đối với Pandas Usecase, tôi thấy những điều sau đây khá hữu ích và nhỏ gọn, mặc dù không thể đọc được hoàn toàn:

Nhận ngày làm việc gần đây nhất:

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
0

Theo hướng khác, chỉ cần sử dụng:

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
1

Đã trả lời ngày 29 tháng 11 năm 2021 lúc 17:05Nov 29, 2021 at 17:05

Ycoycoyco

3592 Huy hiệu bạc11 Huy hiệu đồng2 silver badges11 bronze badges

Điều này sẽ cung cấp cho một máy phát các ngày làm việc, tất nhiên không có ngày lễ, Stop là đối tượng DateTime.Datetime. Nếu bạn cần ngày lễ, chỉ cần lập luận thêm với danh sách các ngày lễ và kiểm tra bằng 'ifology' ;-)

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
2

Sau này bạn có thể đếm chúng như

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
3

Đã trả lời ngày 23 tháng 5 năm 2015 lúc 11:27May 23, 2015 at 11:27

Hướng dẫn get last business day python - bắt trăn ngày làm việc cuối cùng

Mastiermastiermastier

8321 Huy hiệu vàng10 Huy hiệu bạc21 Huy hiệu đồng1 gold badge10 silver badges21 bronze badges

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
4

Đã trả lời ngày 30 tháng 4 năm 2014 lúc 2:59Apr 30, 2014 at 2:59

ThemanthemanTheMan

7038 Huy hiệu bạc11 Huy hiệu đồng8 silver badges11 bronze badges

Tại sao bạn không thử một cái gì đó như:

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
5

Đã trả lời ngày 19 tháng 8 năm 2013 lúc 6:23Aug 19, 2013 at 6:23

Một phiên bản đơn giản hóa khác

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
6

Đã trả lời ngày 5 tháng 4 năm 2020 lúc 16:00Apr 5, 2020 at 16:00

Hướng dẫn get last business day python - bắt trăn ngày làm việc cuối cùng

CircleonCirclescircleoncirclesCircleOnCircles

2.6701 Huy hiệu vàng19 Huy hiệu bạc27 Huy hiệu đồng1 gold badge19 silver badges27 bronze badges

Giải pháp bất kể các khu vực pháp lý khác nhau có các ngày lễ khác nhau:

Nếu bạn cần tìm ID phù hợp trong bảng, bạn có thể sử dụng đoạn trích này. Mô hình bảng là một mô hình sqlalchemy và ngày tìm kiếm trong ngày thực địa.

import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))
7

Đây không phải là một giải pháp mà tôi muốn giới thiệu khi bạn phải chuyển đổi với số lượng lớn. Nó khá chung chung và đắt tiền vì bạn không sử dụng tham gia. Hơn nữa, nó giả định rằng bạn có một ngày có liên quan là một trong 100 ngày gần đây nhất trong bảng mô hình. Vì vậy, nó đã giải quyết đầu vào dữ liệu có thể có ngày khác nhau.

Đã trả lời ngày 25 tháng 5 năm 2020 lúc 17:34May 25, 2020 at 17:34

Hướng dẫn get last business day python - bắt trăn ngày làm việc cuối cùng

PatrickpatrickPatrick

3773 Huy hiệu bạc7 Huy hiệu Đồng3 silver badges7 bronze badges

Làm thế nào để tôi có được ngày làm việc cuối cùng ở Python?

Đầu vào: test_date = DateTime (2020, 1, 31).
Đầu ra: 2020-01-30 00:00:00 ..
Giải thích: 31 tháng 1 năm 2020, là một ngày thứ sáu, ngày làm việc cuối cùng là thứ Năm, tức là 30 tháng 1 ..
Đầu vào: test_date = dateTime (2020, 2, 3).
Đầu ra: 2020-01-31 00:00:00 ..
Giải thích: 3 tháng 2 năm 2020, là một ngày thứ Hai, ngày làm việc cuối cùng là thứ Sáu, tức là ngày 31 tháng 1 ..

Làm thế nào để tôi có được ngày cuối tuần cuối cùng của tháng ở Python?

Trong đó, chúng tôi thực hiện nhiệm vụ nhận lịch mỗi tháng bằng thángMỗi ngày trong tuần được trích xuất và tối đa của nó, là tối đa của cả tháng là ngày cuối tuần, do đó được trích xuất.using monthcalendar() from the calendar library. Each weekday date is extracted and the maximum of it, being the maximum of the whole month is the last weekday, hence extracted.

Làm thế nào để tôi có được thứ Hai tuần trước ở Python?

Sử dụng hàm TODAY () (nhận ngày cục bộ hiện tại), để có được ngày địa phương hiện tại của ngày hôm nay và tạo một biến để lưu trữ nó. Thông qua ngày trong tuần như một đối số cho hàm tương đối ().Ở đây Mo (-1) cho biết nhận được vào tuần trước thứ Hai, MO có nghĩa là Thứ Hai.In ngày thứ hai cuối cùng. Pass the weekday as an argument to the relativedelta() function. Here MO(-1) says getting last week Monday, MO means Monday. Print the last Monday date.

Làm thế nào để tôi có được thứ tư tuần trước ở Python?

Bạn có thể nhận được đối tượng Ngày Python cho Thứ Tư tuần trước bằng cách sử dụng một số môn toán ngày Python.Dù ngày nào trong tuần là ngày hôm nay, trừ 2 lần từ nó và lấy mô đun của kết quả vào 7 sẽ cho chúng ta cách trở lại vào ngày thứ tư.subtracting 2 from it and taking the modulus of the result by 7 will give us how back was wedenesday.