Przesuwanie dni roboczych ze świętami
Przesuń datę o minus 366 do 366 dni roboczych, pomijając weekendy i do 1000 świąt.
from datetime import date, timedelta
def working_day_shift(start, days, holidays):
if type(start) is not date or type(days) is not int or not -366 <= days <= 366:
raise ValueError("days.input")
if type(holidays) is not set or len(holidays) > 1000 or any(type(d) is not date for d in holidays):
raise ValueError("days.holidays")
remaining, step = abs(days), 1 if days >= 0 else -1
for _ in range(7*(remaining+len(holidays))+7):
if remaining == 0:
return start
try:
start += timedelta(days=step)
except OverflowError as error:
raise ValueError("days.range") from error
if start.weekday() < 5 and start not in holidays:
remaining -= 1
raise RuntimeError("days.steps")- Projekt
- Sprawdź zero, ruch wstecz i granice kalendarza, odrzuć błędne daty bez zmiany świąt.
- Sprawdź przed zastosowaniem
- Porównaj rzeczywiste zachowanie z oczekiwanym wynikiem. Jeśli sprawdzenie się nie powiedzie, wyjaśnij przyczynę przed kolejnymi zmianami.
- Modele
- Dodaj endpoint zgodny z OpenAI lub Anthropic, podając bazowy URL i klucz API, jeśli jest wymagany. Sprawdź połączenie. Lokalny serwer modelu musi działać; zdalne narzędzia mogą przesyłać dane oddzielnie.
from datetime import date, timedelta
def working_day_shift(start, days, holidays):
if type(start) is not date or type(days) is not int or not -366 <= days <= 366:
raise ValueError("days.input")
if type(holidays) is not set or len(holidays) > 1000 or any(type(d) is not date for d in holidays):
raise ValueError("days.holidays")
remaining, step = abs(days), 1 if days >= 0 else -1
for _ in range(7*(remaining+len(holidays))+7):
if remaining == 0:
return start
try:
start += timedelta(days=step)
except OverflowError as error:
raise ValueError("days.range") from error
if start.weekday() < 5 and start not in holidays:
remaining -= 1
raise RuntimeError("days.steps")Określ reguły harmonogramu przed edycją kodu dat
Kod harmonogramów często miesza reguły biznesowe ze zwykłą arytmetyką kalendarzową. DayThistle to środowisko programowania z AI dla Windows, w którym rozdzielisz te kwestie podczas przeglądu projektu. Zacznij od daty wyznaczanej przez aplikację, daty oczekiwanej i reguł uzasadniających oczekiwanie. Przed propozycją poprawki poproś podłączony model o analizę odpowiedniego kodu.
Możesz na przykład zlecić przegląd funkcji terminów pomijającej weekendy i przekazany zbiór świąt. Wyjaśnij, czy dzień początkowy jest liczony, jak działają przesunięcia ujemne i kto dostarcza dane świąt. Poproś o propozycję zachowującą te decyzje zarówno w kodzie wywołującym, jak i funkcji pomocniczej, zamiast zakładać jedną uniwersalną definicję dnia roboczego.
Zweryfikuj proponowane zmiany na przypadkach testowych wynikających z tych reguł. Uwzględnij przejście przez weekend, święto sąsiadujące z weekendem, przesunięcie zerowe i ruch wstecz. Uruchom testy projektu i sprawdź zachowanie graniczne dla nieobsługiwanych dat. Poprawnie wyglądający termin w jednym przykładzie nie potwierdza, że wszystkie wywołania używają tej samej polityki.
DayThistle łączy się z obsługiwanymi punktami końcowymi zgodnymi z OpenAI lub punktami Anthropic. Możesz wybrać model AI bez cenzury oferowany przez Twoją usługę; dostępne narzędzia i kontekst nadal zależą od serwera. Zapisz politykę w zadaniu, aby model wspierał implementację bez cichego decydowania o harmonogramach pracy organizacji.
Pytania stojące za zmianą dni roboczych
Czy DayThistle dostarcza kalendarz świąt?
Przykładowe zadanie używa danych świąt dostarczanych przez aplikację. W zleceniu określ ich źródło i oczekiwany zakres. Nie zakładaj, że otwarcie środowiska dostarcza aktualne święta regionalne lub rozstrzyga, które z nich wpływają na terminy.
Czy dzień początkowy powinien wliczać się do przesunięcia?
Określ tę regułę jawnie i dodaj przypadek, w którym początek przypada na dzień roboczy. Różne polityki dają różne odpowiedzi. Poproś asystenta o zachowanie wybranej konwencji zarówno przy ruchu naprzód, jak i wstecz.
Jak odróżnić błędne dane świąt od usterki kodu?
Zachowaj dokładny zbiór świąt z nieudanym przypadkiem testowym i sprawdź jego zawartość przed zmianą obliczeń. Porównaj wynik z zapisaną polityką. Brak wpisu święta i błędny warunek pomijania wymagają różnych poprawek.
Co jeśli proponowana pętla nie ma jasnego warunku zakończenia?
Zapytaj, jak implementacja ogranicza obsługiwane przesunięcia i obsługuje przekroczenie zakresu kalendarza. Sprawdź to zachowanie przed akceptacją. Uruchom testy graniczne obok zwykłych dat, aby poprawka jednego terminu nie wprowadziła nieograniczonego obliczenia.
DayThistle · Zaktualizowano 2026-10-25